传奇,命令,事件& ReadModel

时间:2012-05-28 09:56:17

标签: cqrs event-sourcing saga

我正在撰写我的第一个传奇,我对阅读模型感到有些困惑。让我们用一个例子来解释它:

我有三个有限的背景:编程承包商控制。每个都有其特定的阅读模型。

worflow:

  • 编程发送事件“ JobScheduled
  • Saga 收到此活动并告知承包商安排工作”。
  • 完成后,承包商会发送一个事件“ JobDone ”。
  • Saga 收到此活动,并将控制告诉“启动控制期”。

这里的一切都很好。我们处于写作方面,因此我们正在传递重要信息,以便继续进行。

我的问题来自不必要的信息。假设事件“ JobScheduled ” 有一个注释字段:“测试注释”,在完成此工作之前,此字段将更改为“测试注释重要”。这种变化对于所描述的工作流程并不重要,但重要的是承包商在查看承包商的读取模型时可能会看到该领域的变化上下文。

我是否应该向事件 NoteChanged 提供并处理它,还是应该创建一个直接在承包商有界上下文中监听此事件的投影?

将它提供给 saga 看起来像是不必要的工作,因为我只是在这里更新readmodel,没有涉及更改的域。

另一方面,在两个有界上下文之间进行直接耦合会删除sagas的一个资产,即在工作流中修改有界上下文之间相互作用的相互作用的可能性。

感谢您的阅读,

2 个答案:

答案 0 :(得分:0)

就个人而言,我会发送一个命令“Change note”,因为我认为它就像一个必须保存在聚合的事件流中的信息。如果你的传奇没有“感觉”告诉任何人这个命令,或者只是将信息提供给一个安静地更新你的阅读模型的处理程序,我猜这很好。

答案 1 :(得分:0)

如果更改注释很重要,则应明确建模。这可以通过像你已经做的那样引入一个事件来实现。

如果所述事件与该过程有任何关联,则可以由Saga处理。如果它只需要在不同的读模型中表示,那么只需在它们各自的预测中处理它就可以了。

一个上下文可以很好地监听和处理另一个上下文的事件,甚至跨越应用程序边界。至少这是跨事件集成应该如何在以事件为中心的体系结构中工作。