CQRS传奇 - 我明白了吗?

Gol*_*den 17 aggregate cqrs saga

我正在尝试理解传奇,同时我有一种特定的思考方式 - 但我不确定我的想法是否正确.因此,我想详细说明并让别人告诉我这是对还是错.

根据我的理解,传奇是解决长期运行流程建模问题的解决方案.长时间运行意味着:涉及多个命令,多个事件以及可能的多个聚合.该进程未在其中一个参与聚合内建模,以避免它们之间的依赖关系.

基本上,saga只不过是一个命令/事件处理程序,它对内部和外部命令/事件作出反应.它不包含其自身的逻辑,它只是一个(有限)状态机,并为此提供的任务,例如当事件发生X,发送命令ÿ.

Sagas持久存储到事件存储以及聚合,与特定的聚合实例相关联,因此在使用此特定聚合(或聚合集合)时会重新加载.

这是正确的吗?

Den*_*aub 9

有不同的方法来实现Sagas.从无状态事件处理程序到达,它们一直发布命令以承载所有状态,并且基本上是域的聚合本身.Udi Dahan曾写过一篇关于Sagas是(在他的具体情况下)正确建模系统中唯一的聚合物的文章.我会查一下并更新这个答案.

还有基于文档的传奇的概念.

  • 该文章仍在某处可用吗?链接现在已经破了,我对内容非常好奇. (2认同)
  • 显然,这篇文章被Rinat Abdullin本人收回:https://twitter.com/abdullin/status/632157086638546944 (2认同)

Jeh*_*hof 7

你对Sagas的定义听起来对我来说是正确的,我也会这样定义它们.

我所做的描述中唯一的变化是,saga只是事件的事件处理程序(而不是命令),并且基于接收事件,其内部状态构造命令并将其命名为CommandBus以供执行.

通常,Saga只有一个事件要从(StartByEvent)启动,多个事件要转换(TransitionByEvent)到下一个状态,多个事件要由(EndByEvent)结束.

MSDN上,他们将Sagas定义为ProcessManager.