事件风暴:在进行领域驱动设计过程中主要由领域专家与开发团队配合完成,领域专家与开发团队经过不断地对业务需求进行交流(开会进行事件风暴),识别业务核心需求,得出清晰的问题空间,然后提炼业务知识概念,定义出统一业务语言。
战略设计:之后对问题空间进行分析评估,进行建模和边界划分,定义出核心域与其它子域的限界上下文,并用上下文映射图关联出他们之间的映射关系。然后对以上建模进行架构划分,通过分层架构、六边形架构、整洁架构等架构方法划分各领域的逻辑编辑与物理边界。
战术设计:在战术设计阶段对每一个限界上下文进行分析,识别出其实体、值对象、聚合、领域事件等模型,并以领域模型指导程序的设计与编码实现。
重构:在实践过程中若发现新的核心概念以及划分不合理的地方则进行不断重构。
3.1 事件风暴
是一种快速的设计技术,让领域专家和开发人员都参与其中,聚焦于业务和业务流程,通过头脑风暴的方式达成共识。完成统一语言定义、识别限界上下文、划分子域。
3.2 风暴步骤
1.识别领域事件。通过创建一系列写在便利贴上的领域事件,快速梳理业务流程。
创建领域事件的基本原则:
- 在创建领域事件时优先关注的是业务流程,而不是数据及其结构。
- 把每个领域事件梳理出来,事件名称以动词过去式命名,用橘色标识出来,使其显得突出,如:TicketCreated;
- 按时间顺序从左到右列排领域事件;
- 按照业务流程,将并发的事件上下排列在一起;
- 记录领域事件在业务流程中的问题点;
2.识别命令(Command)。创建导致每个领域事件发生的命令。
通常一条命令的产生是由用户操作发生的,也有其他系统发生的事情引起的,命令的执行将导致领域事件的发生。
创建命令的基本原则:
- 写下导致每个领域事件发生的对应的命令名称,以动词+名词形式命名,用浅蓝色标识出来,如:CreateTicket;
- 按时间顺序从左到右列排领域事件;
- 把命令记录在它引起的领域事件旁边;
3.识别聚合。
把命令和领域事件通过实体关联起来。实体就是命令执行和领域事件触发的数据载体。
创建聚合指南:
- 业务人员不理解聚合的含义,可以用实体代替,或者直接称之为数据;
- 把命令和领域事件分别写在聚合的左下角和右下角,表明他们是关联在一起的;
4.划分边界。
- 在不同业务人员对相同术语的定义出现冲突时,将此术语划分在不同边界中,即不同的团队划分在不同边界;
- 在重要但不属于核心域的某个概念出现时,将其划分在其他边界中;
- 使用实线划分限界上下文边界,使用虚线划分子域边界。