知识卡片

领域服务协调聚合与资源库完成状态持久化

普通读书笔记卡 · 1977.ai

内容

领域模型不建议聚合依赖资源库,更不允许把持久化职责分配给聚合。若业务需求要求对聚合的状态变更进行持久化,就需调用资源库,而这一调用工作由领域服务完成。如钟点工提交工作时间卡由HourlyEmployee聚合完成,但真正落库牵涉HourlyEmployee与HourlyEmployeeRepository的协作,此时引入领域服务TimeCardService:其submitTimeCard()先通过EmployeeId查询重建HourlyEmployee(资源库经ORM重建时会把它attach到持久化上下文),该对象的任何变更都被ORM监听、通过唯一标识明确身份;当聚合执行submit(timecard)时新增操作被记录在持久化上下文中,一旦执行资源库的save(),持久化上下文就完成对这一变更的提交。发散:分工清晰——聚合负责改状态、资源库负责落库、领域服务负责把两者编排在一次业务操作里,谁都不越界。

参考来源

- 位置:《解构领域驱动设计》第19章 19.3.4(源文件:_epub-src/OEBPS/032.xhtml) - 结论依据:原文以TimeCardService说明领域服务协调聚合与资源库完成状态持久化。 - 原始内容:领域模型不建议聚合依赖资源库……如果业务需求要求对聚合的状态变更进行持久化,就需要调用资源库。调用工作由领域服务完成。