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

问题描述 投票:0回答:1

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

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

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

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

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

domain-driven-design cqrs event-sourcing
1个回答
0
投票

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

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

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

希望如此。

也-提防'create''read'update'命令。听起来像是代码的味道。签出https://danielwhittaker.me/2014/10/18/6-code-smells-cqrs-events-avoid/

© www.soinside.com 2019 - 2024. All rights reserved.