知识卡片
事件识别聚合
内容
一个聚合常对应一段现实活动及其事件集合。沿时间线寻找“已下单、已付款、已发货”这类事实,比从名词列表出发更容易看出哪些对象共同完成同一业务过程。
参考来源
- 位置:《复杂软件设计之道》第3章《聚合设计》"3.2.2 根据领域事件设计聚合"一节(源文件:_chapter_text/ch03.txt)
- 结论依据:原文以医生开处方为例,说明不能简单用"主谓宾语法"把主语当聚合根,而要沿命令-事件的时间线(预约→诊断→取药)判断"医生开处方只是整个流程中的一个环节",最终确定"处方"而非"医生"才是承担业务规则一致性的聚合根。
- 原始内容:根据事件风暴议程,首先罗列出医生开处方这个活动中的命令和事件。命令是:(医生)开处方;事件是:处方开了……现在有了命令和事件,按照时间线排列一下:医生开处方之前有什么流程活动?是不是需要预约和检查?开处方之后有什么活动?从药房取药吗?所以医生开处方只是整个流程中的一个环节……聚合根是处方,其主要包含业务规则为药和病情的规则不变性约束。