个人领域驱动设计学习笔记最后一章.
三. DDD和微服务边界划分
DDD对战略设计是如何指导微服务划分的呢?
1. 用限界上下文分而治之
一个拥有清晰子域的上下文
跨上下文的概念映射:
四色原型和Domain-Neutral Component(DNC)有助于防止知识的污染:
反面的例子 - 订单聚合
一个订单可以被拆分为多个子订单, 多个子订单又可能被分为多个包裹单及售后单等.
2. 系统上下游
2.1 系统集成视图
下游定义接口, 上游提供实现.
2.2 结合值对象加防腐层应对变化
只有适配器需要变化,.
适配器需要容易识别.
适配器充当防腐层.
2.3 区分上下游的意义
定义上下文及上下文间的关系是战略设计的重点。“战略”层面制定清楚,“执行”层面才会避免无谓的争执。缺乏顶层设计会导致执行层的混乱和低效。
“剪刀差”定义了工业和农业之间的关系,“总设计师”定义了特区和其它行政单元、特区和外部世界的关系。
至于如何定义上下游,需要考虑用例。比如在事件风暴里识别出的Command属于哪个上下文,对这个是有帮助的。
上游的知识不应该理解下游的知识.
上游的上下文不应该理解下游的概念.
2.4 谨慎使用的Partnership和共享内核
2.5 如何划分上下文
-
自上而下,业务视角看业务领域和业务组织
-
自下而上,根据识别出的聚合根,分析相关性,分组
-
看领域的规模,小的话可以自下而上(无限的白板),大的话要两者结合;
识别聚合根很重要,尤其注意隐形概念的挖掘,相同名字的不同含义的概念等 .
3. 总览
四. DDD和中台的关系
在构建业务中台对过程中,通常把DDD作为重要对方法之一,到底DDD在中台建设中能起到什么作用呢?
1. 中台的共识
目前业界对中台的认识有些地方不统一, 不过目前共识是中台-企业能力复用.
sofa
2. DDD的作用
- DDD有利于子域划分、解耦,识别核心域,提高通用性
- DDD无关扩展,但有利于扩展
- 模型的数据结构很难扩展,利用DDD有利于数据结构的通用性,越通用越不需要扩展
- 最容易扩展的是算法和策略,富领域模型容易职责单一,代码结构化程度高,潜在可扩展点容易“涌现”