CQRS和事件源-保存命令而不是事件?

时间:2020-03-31 20:59:26

标签: domain-driven-design cqrs event-sourcing

我是CQRS和事件源的新手,但也许有人可以帮助我。

简短地说:我将命令对象带到一个聚合对象上。聚合生成一个事件,该事件存储在存储库中。现在,我可以使用此事件将聚合重建为当前状态。正确吗?

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

这些事件也可以用作域事件,但是我不需要它们来进行事件来源。

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

1 个答案:

答案 0 :(得分:3)

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

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

如果您需要重播事件,也会遇到问题。假设您需要根据过去的事件创建一个新的读取模型。但是,如果没有它们,您将无能为力。同样,您不希望系统在重建聚合或创建新的读取模型时实际执行命令使它们执行的所有操作。例如,假设在特定命令的正常处理中发送了电子邮件。您不希望每次重新构建汇总时都发送该电子邮件。

希望如此。

也-提防“创建”“读取”更新“命令。听起来像是代码的气味。检出https://danielwhittaker.me/2014/10/18/6-code-smells-cqrs-events-avoid/