知识卡片

事件与聚合同库可用本地事务保证强一致

普通读书笔记卡 · 1980.w

内容

事件持久化与聚合持久化可能不一致。若把一个聚合产生的所有领域事件与聚合放在同一限界上下文的同一数据库,可用本地事务保证二者强一致:存储事件时同时持久化更新后的聚合。既然库中已有聚合最新状态,就无须靠事件重建聚合,但领域逻辑仍体现为命令-事件的状态迁移形式;查询则与事件无关,直接查聚合库(issueOf/allIssues 直接走 AggregateRepository,processCommandThenSave 内 eventStore.save 后再 repo.save)。优势:本地事务保证一致、支持追溯审计、避免重建性能损耗。代价:聚合会被更新故持久化比事件复杂,事件的异步非阻塞特性被抹杀,事件价值退化为对状态变迁的追溯。发散:强一致同库方案牺牲异步换简单,适合一致性要求高、并发压力不极端的场景。

参考来源

- 位置:《解构领域驱动设计》附录B B.2.5(源文件:_epub-src/OEBPS/035.xhtml) - 结论依据:原文给出事件与聚合同库、本地事务保证强一致的方案及其优势与代价。 - 原始内容:可以选择将事件存储与聚合存储放在同一个数据库,以保证事件存储与聚合存储的事务强一致性……事件的异步非阻塞特性被无情地抹杀了。