DDD领域驱动设计
DDD领域驱动设计,是一个适用于复杂系统的设计范式
首先,先看一下DDD的简单项目结构
当然DDD的项目结构可以根据自己的理解自行调整
- 首先是应用层 application,这一层是用于存放业务接口及实现类的,值得一提的是,业务类并不真正的处理业务,而是进行一个功能的组合,真正的功能实现由各个领域负责
- 领域层 domain,这一层是DDD的核心,用于存放不同的领域模型,领域模型有以下几个组成部分
- aggregate: 聚合,是将多个领域对象进行聚合,从而将一些对不同领域对象的操作进行封装,对外提供简单操作
- entity: 实体类,值得一提的是,DDD的实体类其实是充血型,及实体类内部是包含对该实体类内部属性的操作的,这种操作不只局限于get set方法,还包含了和自身属性相关的业务
- repository: 仓库,仓库中包含的是对领域对象的获取及持久化,可以使外界不必关心数据库的操作,以及具体的数据库实现
- service: 领域服务,用于提供对实体类的额外的服务,如对两个实体类进行操作,由于该种操作无法在实体类内部进行,所以抽到外部进行额外封装
- vo: Value Object: 值对象,值对象包含数字,字符串,日期等,这种数据通常是用来描述某个事物的,值对象应该是简单的,不具备唯一标识的,并且是不可改变的
- 基础层 infrastructure,这一层是用于存放系统的基础设施的,包括数据库及具体的实现,工具类,配置类等全局共享的东西
- 用户接口层 interfaces,这一层存放的是对外暴露的接口,如controller之类的东西