Domain driven design CQRS&;事件源-保存命令而不是事件?

Domain driven design CQRS&;事件源-保存命令而不是事件?,domain-driven-design,cqrs,event-sourcing,Domain Driven Design,Cqrs,Event Sourcing,我不熟悉CQR和活动采购,但也许有人能帮我 简而言之:我将一个命令对象作为聚合对象。聚合将生成一个事件,该事件存储在存储库中。现在,我可以使用此事件将聚合重建到当前状态。对吗 现在让我考虑一下:保存命令不是更容易吗?如果我有一个create命令和五个update命令,我可以通过在空聚合上执行这六个命令来重建聚合。我不需要处理命令和事件来生成聚合 这些事件也可以用作域事件,但我不需要它们用于事件源 使用事件源而不是我的方法有什么好处?好问题。有几个原因。我只讲两个。第一个更具概念性,第二个更为具体

我不熟悉CQR和活动采购,但也许有人能帮我

简而言之:我将一个命令对象作为聚合对象。聚合将生成一个事件,该事件存储在存储库中。现在,我可以使用此事件将聚合重建到当前状态。对吗

现在让我考虑一下:保存命令不是更容易吗?如果我有一个create命令和五个update命令,我可以通过在空聚合上执行这六个命令来重建聚合。我不需要处理命令和事件来生成聚合

这些事件也可以用作域事件,但我不需要它们用于事件源


使用事件源而不是我的方法有什么好处?

好问题。有几个原因。我只讲两个。第一个更具概念性,第二个更为具体

从概念上讲,您正在存储由于命令而更改的内容。到底发生了什么。随着应用程序在其生命周期中的发展,您可能会改变处理命令的方式。您甚至可以更改创建的事件。因此,如果您只有该命令,则无法保证能够恢复聚合的状态

如果需要重播事件,您也会遇到问题。假设您需要基于过去的事件创建一个新的读取模型。但是如果你没有它们,你就不能。此外,您也不希望系统实际执行命令在重建聚合或创建新的读取模型时所执行的所有操作。例如,假设电子邮件是在正常处理特定命令的过程中发送的。您不希望在每次重建聚合时都发送该电子邮件

希望这是有道理的

另外-注意“创建”和“读取”更新命令。听起来像是密码的味道。查看此处的更多信息