DDD的基础概念
实体、值对象、聚合、
领域服务、防腐层、仓
库、工厂
DDD充血模型
贫血模型=》 POJO
问题: 看不出业务有什么逻辑
一个大而全PoJo对象中只有Set/Get,由Service操作数据,导致贫血失忆症。
从一整个单独的pojo中,按业务定义单独实体,各个实体只做自己单独的事情。
值对象
在实体对象定义内部对象,统一入口
业务:涉及状态变化
仓库与工厂
所有对数据的操作放入工厂中
涉及多个数据库组装数据,可以采用工厂Builder
防腐层
隔离第三方外部服务
基础设施层
比如 kafaka或者rabbitmq作为内部组件
领域服务
跨实体状态变化
原:在目标中持有变量
DDD:每个实体只能操作自己领域内属性,调用领域的业务方法,不能调用set方法
1、需求更容易梳理:业务逻辑清晰纯净,没有业务与实现细节之间的复杂转换。
2、业务更容易开发:各领域内完全自治,不用担心其他模块的影响。
3、更容易单元测试:业务与外部依赖完全隔离,各功能组件的依赖也都是独立的。
很容易设计单元测试案例,单独测试。
4、技术容易更新:所以实现细节都是业务逻辑的扩展,指哪改哪。对业务无影响。
DDD四层架构规范
1、领域中的对象由实体和值对象组成。对值对象的访问必须经由所属的实体对象。
2、相关联的一组实体与值对象组成聚合。对聚合内对象的访问必须经由聚合根对象。
3、跨实体的操作必须经由领域服务。
4、应用服务层只通过领域服务或者聚合根来组织业务,自身不带任务实现逻辑。
5、业务与数据隔离。领域层只关注业务,数据支撑全部交由基础设施层。