架构选择
COLA框架,搭建分层模型
核心思路
业务内聚,分而治之
APP层可先厚,再做薄
领域层抽象
1)实体
唯一标识,具备生命周期,包含业务关键行为
包含实体相关的方法,实体对象可以包含接口(接口可注入),实体建议使用工厂模式创建2)值对象
只关系属性,没生命周期。
避免大量对象为实体,从而需要唯一标识,唯一标识会带来数据库主键之间关系网庞大。3)领域服务
属于领域业务,但非实体对象本身的逻辑。
多领域对象计算,业务动作,领域对象转换等均可定义为领域服务。4)聚合
将实体和值对象进行聚合
形成业务内聚。
聚合根设计
如何聚合根:
1)生命周期一致
2)问题域一致性
3)场景频率一致性
4)聚合内的元素尽可能少
控制边界
如何割断值对象
1)引入Id值对象
2)使用ORM框架的LazyFetch机制(注意生命周期范围)
3)引入Supplier的get延迟机制
实体和值对象的创建,查询
实体的创建最好走工厂模式/builder模式
实体的变更需要走唯一gateway/Repository模式
实体的查询走CQRS模式,注重效率即可
值对象的变更,查询随意,不受约束。
实体对象的持久化
使用mongodb文档型数据库
使用聚合根快照概念
https://github.com/meixuesong/aggregate-persistence
关系数据库,实体持久化可以灵活,一个实体多表(值对象占表),或者一实体一表
各层对象转换
利用 mapstruct
参考
https://blog.csdn.net/significantfrank/ COLA框架
https://developer.aliyun.com/article/713097?spm=a2c6h.13262185.profile.12.1ea36c7btzXxqf DDD落地
https://zhuanlan.zhihu.com/p/436465508 DDD落地
https://blog.csdn.net/qq_33589510/category_10734882.html DDD系列