领域驱动设计(四)

506 阅读2分钟

个人领域驱动设计学习笔记最后一章.

三. DDD和微服务边界划分

DDD对战略设计是如何指导微服务划分的呢?

1. 用限界上下文分而治之

​ 一个拥有清晰子域的上下文

3_8.一个拥有清晰子域的上下文.png

​ 跨上下文的概念映射:

3_9.跨上下文的概念映射.png

四色原型和Domain-Neutral Component(DNC)有助于防止知识的污染:

3_10.四色原型.png ​ 反面的例子 - 订单聚合

3_11.订单.png

一个订单可以被拆分为多个子订单, 多个子订单又可能被分为多个包裹单及售后单等.

2. 系统上下游

2.1 系统集成视图

3_12.系统集成视图.png

下游定义接口, 上游提供实现.

2.2 结合值对象加防腐层应对变化

3_13.结合值对象加防腐层应对变化.png

只有适配器需要变化,.

适配器需要容易识别.

适配器充当防腐层.

2.3 区分上下游的意义

​ 定义上下文及上下文间的关系是战略设计的重点。“战略”层面制定清楚,“执行”层面才会避免无谓的争执。缺乏顶层设计会导致执行层的混乱和低效。

​ “剪刀差”定义了工业和农业之间的关系,“总设计师”定义了特区和其它行政单元、特区和外部世界的关系。

​ 至于如何定义上下游,需要考虑用例。比如在事件风暴里识别出的Command属于哪个上下文,对这个是有帮助的。

上游的知识不应该理解下游的知识.

上游的上下文不应该理解下游的概念.

2.4 谨慎使用的Partnership和共享内核

3_14.谨慎使用的Partnership和共享内核.png

2.5 如何划分上下文

  • 自上而下,业务视角看业务领域和业务组织

  • 自下而上,根据识别出的聚合根,分析相关性,分组

  • 看领域的规模,小的话可以自下而上(无限的白板),大的话要两者结合;

识别聚合根很重要,尤其注意隐形概念的挖掘,相同名字的不同含义的概念等 .

3. 总览

3_15.总览.png

四. DDD和中台的关系

在构建业务中台对过程中,通常把DDD作为重要对方法之一,到底DDD在中台建设中能起到什么作用呢?

1. 中台的共识

​ 目前业界对中台的认识有些地方不统一, 不过目前共识是中台-企业能力复用.

sofa

2. DDD的作用

  • DDD有利于子域划分、解耦,识别核心域,提高通用性
  • DDD无关扩展,但有利于扩展
  • 模型的数据结构很难扩展,利用DDD有利于数据结构的通用性,越通用越不需要扩展
  • 最容易扩展的是算法和策略,富领域模型容易职责单一,代码结构化程度高,潜在可扩展点容易“涌现

3. 扩展点的涌现

refactoring.guru/smells/swit…