Domain driven design 触发CQR中其他域更改的域事件

Domain driven design 触发CQR中其他域更改的域事件,domain-driven-design,cqrs,domain-events,Domain Driven Design,Cqrs,Domain Events,在我看到的所有CQR示例中,域事件触发对读取模型的更新,而不是其他。但是,如果希望域事件导致域中的其他更改,该怎么办 例如,假设您有以下要求: 单击“关闭帐户”按钮后,关闭帐户 当账户被支付后,关闭账户 关闭帐户时,将帐户所有者标记为“特殊” 最好的处理方法是什么 Make Account.Close()创建AccountClosed事件,并将所有者标记为“特殊” 创建一个AccountClosed处理程序,将所有者标记为“特殊” 生成提交MarkOwnerAsSpecial命令的Accou

在我看到的所有CQR示例中,域事件触发对读取模型的更新,而不是其他。但是,如果希望域事件导致域中的其他更改,该怎么办

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

  • 单击“关闭帐户”按钮后,关闭帐户
  • 当账户被支付后,关闭账户
  • 关闭帐户时,将帐户所有者标记为“特殊”
最好的处理方法是什么

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

  • 有一个专门的概念叫做“传奇”。从Rinat Abdullin的这篇文章开始,然后开始


    您的选项3接近这一概念。saga基本上是一个发出新命令的事件处理程序。您不希望让事件在其来源之外操纵聚合,而是希望根据业务规则处理事件并提交新命令。这就是传说将要做的。

    我以前读过,但它太抽象了,我不知道传说基本上是如何将事件转化为命令的。我发现另一篇由两部分组成的文章解释了这一点,并提供了代码示例@幽会者的链接给出了一个404,似乎已经被重新定位到