在CQRS中维护聚合根引用。 Sagas vs命令处理程序

时间:2016-09-09 09:37:34

标签: cqrs event-sourcing

我正在构建一个原型来探索CQRS和事件采购。

假设我有2个根聚合,组织位置,这是一对多关系,需要双向引用。没有组织(例如自由职业者)就可以存在职位。

对于此讨论,我们假设已创建了Organization和Position对象。我现在有一个AddPositionToOrganisation命令。

确保引用同步我看到我有两个选择。

  1. 组织命令处理程序可以生成两个事件。一个用于组织,一个用于添加相应参考的位置。
  2. 创建一个倾听PositionAddedOrganisation事件并创建AddOrganisationToPositionCommand的传奇。
  3. 使用Organization命令处理程序为Position生成事件是否有问题?从好的方面来说,它将相关的功能组合在一起(引用),但是使组织负责一些位置逻辑。

    非常欢迎来自更有经验的开发人员的一些见解。

1 个答案:

答案 0 :(得分:3)

aggregate定义一致性边界;每个事务都限定为一个聚合。尝试一次修改多个聚合(例如在命令处理程序中)违反了这个建议。

process manager(传奇)是这个用例的理想选择。它是一个独立的组件,以交叉聚合,最终一致的方式对域事件做出反应。最简单的形式是,进程管理器对域事件做出反应并响应命令。它还可以跟踪与流程相关的状态,以帮助关联聚合之间的事件。

因此,我建议你采用第二种方法。

有关流程管理器的进一步阅读,我建议使用Microsoft的模式& amp;撰写的CQRS Journey指南。实践团队。 Vaughn Vernon的Implementing Domain-Driven Design书是按照CQRS架构模式构建应用程序的有用参考。