再调整流程和补充分支事件,比如加上乘客迟到意外事件;
通过【事件风暴】可以同步产出领域模型。任何在需求中出现的概念都要反应在领域模型中。如果需求中概念之间存在关系,则领域模型中也存在同样的关系。因此需求分析完成后,领域模型是自然而然产生的,统一语言也有了实现的基础。
通过【事件风暴】还可以梳理出完整的业务场景。在显式明确领域模型后,常常可以发现模糊的需求或者产生新需求,能够明确看到需求的遗漏点。梳理出完整的场景后,测试用例也能同步产出,进一步在各个团队之间达成共识。
领域驱动的开发思维
除了前面提到的概念外,领域驱动设计还影响了开发思维,也就是由外而内和测试先行。
由外而内是指开发代码从外部代码开始,以内部代码结束。外部的需求和场景具有确定性,能够提供关于系统的重要的信息。从外部代码开始开发,能够在开发中聚焦于当前层级代码,可以在到达内部代码时明确关键的细节,可以从更好的视角看清楚职责分配。也就是先确定代码需求,后实现代码。
测试先行是指在由外而内开发的基础上,用测试来表达设计契约。设计契约就是代码入参、出参、期望行为的一系列信息。在领域驱动设计中,倡导首先确认测试用例,写出测试代码,明确对业务代码的预期,然后再写业务代码。实际上,在领域模型探索和发现中,已经明确了测试用例范围。测试先行能够在早期发现业务代码问题,把缺陷暴露在修改成本最低的时候。
总结
本文初步整理了领域驱动设计的核心概念、架构设计、事件风暴和开发思维:
核心概念:域、子域、限界上下文、领域实体、值对象、领域服务、领域事件、聚合、工厂、资源库;
架构设计:六边形架构;
事件风暴:探索和发现领域模型;