触发CQRS中其他域更改的域事件

时间:2012-01-06 20:41:08

标签: domain-driven-design cqrs domain-events

在我看到的CQRS的所有示例中,域事件触发了对读取模型的更新,但没有其他任何内容。但是,当您希望域事件在域中引起其他更改时呢?

例如,假设您有以下要求:

  • 点击“关闭帐户”按钮后,关闭帐户
  • 帐户付清后,关闭帐户
  • 帐户关闭时,将帐户所有者标记为“特殊”

处理此问题的最佳方法是什么?

  1. 使Account.Close()创建一个AccountClosed事件也将所有者标记为“特殊”
  2. 创建一个AccountClosed处理程序,将所有者标记为“特殊”
  3. 创建一个提交MarkOwnerAsSpecial命令的AccountClosed处理程序
  4. 使关闭帐户的命令处理程序也将帐户所有者标记为“特殊”

1 个答案:

答案 0 :(得分:9)

出于这个目的,有一个名为 Sagas 的特定概念。从Rinat Abdullin的这篇文章开始,然后从那里开始。

http://abdullin.squarespace.com/journal/2010/9/26/theory-of-cqrs-command-handlers-sagas-ars-and-event-subscrip.html

你的选择3接近这个概念。 saga基本上是一个发出新命令的事件处理程序。您不希望事件处理它所源自的聚合之外的聚合,而是根据您的业务规则处理事件并提交新命令。这就是传奇所要做的。