旧文档,TODO重新总结
领域驱动设计(Domain Driven Design,DDD) Eric Evans 编著的《领域驱动设计》
微服务怎么拆,拆的过小复杂度过高无法上线和运维,拆的过大和原来的单体应用没什么区别 借助DDD来拆分
1)梳理业务操作(用例图) 2)对用例操作划分最小模块 3)对联系密切的最小模块进行限界上下文划分 4)限界上下文可以作为微服务边界,也可以合并多个限界上下文作为同一个微服务
领域:
DDD 的领域就是这个边界内要解决的业务问题域
子域:
领域可以进一步划分为子领域。我们把划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或更小的业务范围
核心域:
决定产品和公司核心竞争力的子域 最核心的部分,这部分最好自己研发,如果资源有限,通用域和支撑域可以外包出去
通用域:
没有太多个性化的诉求,同时被多个子域使用的通用功能子域 例如:认证、权限等
支撑域:
既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域 例如:数据字典等
在业务抽象或者后续实现时,使用通用的、统一的业务命名(中英文)
领域和各个子域的划分边界
实体和值对象都是领域对象
实体:
业务实体对象,多个属性、操作或行为的载体
值对象:
一个没有标识符的对象,叫作值对象 属性集合
同一类型的值对象可以互相替换
聚合:
实体和值对象表征个体,聚合则相当于组织,包含一些紧密结合的实体和值对象
聚合根:
聚合中的一个实体,这个聚合中的负责人或根实体,类似主键的作用
微服务内的领域事件:
聚合内,强一致性,DB事务保证 聚合外,基于事件的最终一致性,但是这样会比较复杂,建议也用DB事务保证
微服务间的领域事件:
利用消息中间件
用户接口层 应用层 领域层 基础层