1

我目前正在编写我的第一个 saga,我对读取模型有点困惑。让我们用一个例子来解释它:

我有三个有界上下文:编程承包商控制。它们中的每一个都有其特定的读取模型。

工作流程:

  • 编程发送事件“ JobScheduled
  • Saga收到此事件并告诉承包商安排工作”。
  • 完成后,承包商发送事件“ JobDone ”。
  • Saga接收到这个事件并告诉控制开始控制周期”。

事实证明这里一切都很好。我们处于写入端,因此我们正在传递重要信息以使流程继续进行。

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

我是给传奇事件NoteChanged并对其进行处理,还是应该创建一个在我的承包商有界上下文中直接监听此事件的投影?

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

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

感谢您的阅读,

4

2 回答 2

0

就我个人而言,我会发送一个命令“更改注释”,因为我认为它就像一个必须保存在聚合事件流中的信息。如果您的传奇不会“感觉”告诉任何人有关此命令的信息,或者只是将信息提供给悄悄更新您的读取模型的处理程序,我想这很好。

于 2012-05-29T05:41:51.217 回答
0

如果更改注释很重要,则应显式建模。这可以通过像您已经做过的那样引入一个事件来完成。

如果所述事件与流程有任何相关性,则可以由 Saga 处理。如果它只需要在不同的读取模型中表示,那么只需在它们各自的投影中处理它就可以了。

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

于 2012-05-29T07:11:03.327 回答