知识卡片
把存储事件的副作用外推给领域服务
内容
聚合处理命令返回领域事件后,由领域服务通过聚合依赖的事件存储端口存储事件。事件存储既可视为对外部资源的依赖,也可视为一种副作用。将存储事件的职责转移给领域服务,既符合面向对象「尽量把依赖向外推」的设计原则,也符合函数编程「把副作用往外推」的设计原则;遵循这一原则设计的聚合能很好地支持单元测试。更新聚合需:从事件存储加载事件→创建新聚合实例→遍历事件重建→接收命令生成事件→apply变更状态→存储事件。发散:让聚合保持纯粹、把 I/O 与副作用留在领域服务与端口,是可测试性的通用杠杆,不限于事件溯源。
参考来源
- 位置:《解构领域驱动设计》附录B B.2.2(源文件:_epub-src/OEBPS/035.xhtml)
- 结论依据:原文说明存储事件的副作用外推给领域服务及其符合两大范式原则、更新聚合的活动序列。
- 原始内容:将存储事件的职责转移给领域服务,既符合面向对象尽量将依赖向外推的设计原则,也符合函数编程将副作用往外推的设计原则。