建模和设计的整体流程
建模涡流是指两种活动交替完成,最终得到一个合理的类型。
在建模过程中,这种涡流有不少,战略设计和战术设计的交替完善,就是其中一种。
涡流一:在战略设计中,会将模型分解成限界上下文,但是随着建模的深入,更多的实体被发现,有可能我们会发现有必要分割出新的上下文,那对战略设计就行修改,以及对通用语言进行补充和完善。
涡流二:在战略设计内部,我们要先对领域进行划分,然后再寻找限界上下文,理想情况下,子领域和限界上下文是一一对应的,但是有可能在寻找限界上下文的过程中,有可能一个子领域下划分出了两个限界上下文,这就说明之前的领域划分是有问题的,需要进行调整,而调整之后的领域划分也能更好的指导限界上下文的划分,从而形成一个良性的循环。
建模设计过程并不是一个规则的过程,它是一个以形成最优模型为目标的不断优化的过程。
用户故事
建模和设计的第一步是从用户故事开始的。
通用语言
- 在讨论模型和定义模型时,团队使用的是同一种语言。
- 领域知识需要在团队内部高效流转,模型需要描述。
- 通用语言要体现在代码里。
其实在对用户故事进行挖掘的时候,就已经是建立通用语言了。在讨论的时候,大 部分时间是领域专家在讲解,其他人要做的是理解领域专家提出的各种概念,及时提问,同时固化。
把出现的关键词汇提炼成一个表格。
战略设计
- DDD 中对问题空间和解决方案空间进行分解的过程。
- 目的是分解模型以控制复杂性
- 是DDD与传统建模和设计方法的核心区别之一
- 领域划分
- 寻找限界上下文(BC)
- 确定上下文映射,确定上下文映射的过程还会决定在哪里加入防腐层。
战术设计
- 对各个 BC 的细节设计过程
- BC 内部的模型结构与完整技术方案
下面这张图是从《领域驱动设计》一书中截取的,下面这些元素就是战术设计相关的主要结构元素,包括聚合、实体、值对象、工厂、仓储、模块、服务,有这些元素构成的结构确定下来之后,代码基本上就确定下来了。
战术设计是包括编码的
常见建模方法
- Domain Storytelling (领域故事陈述法)
- Event Storming (事件风暴法),最主流
4C
(四色建模法)