7

假设我们可以通过应用相同的命令集来恢复状态,那么为什么不简单地存储命令而不是事件呢?

4

2 回答 2

13

事件,传达“这发生在我们的系统中”。当命令被接受和处理时发生事件。没有人可以拒绝或改变它发生的事实。它是系统变化的唯一权威来源

命令只是系统的一部分(如 UI)告诉负责对系统进行更改的组件(“命令处理程序”)它想要做什么的一种方式。但是,命令处理程序可以出于各种原因选择不处理该命令。UI 可能有陈旧的信息,处理命令没有商业意义,或者用户可能没有执行该操作的权限。无论哪种方式,命令实际上只是一个请求,与系统状态无关

.

于 2013-02-01T23:10:04.980 回答
1

“命令流”可以由您的应用程序处理以产生“事件流”,它可以产生“当前数据”。

当然可以存储命令,但问题是你为什么要这样做?

一些可能的答案包括,命令本身就是有用的数据。您可能想知道用户尝试将商品添加到购物车的次数(命令),即使购物车已满后不再添加商品(事件)。当然,这可以通过另一个事件来解决,可能名为“尽管购物车已满,但已添加物品”

从这个角度来看,命令就是事件。您使用业务逻辑对其进行处理以产生另一个事件流,我们将它们称为状态事件。您可以创建另一个流,或投影到关系数据结构上,或其他任何东西。添加命令可能会增加复杂性,这有利于更多数据。就像事件溯源本身比传统的“当前状态”数据存储高出一步一样。

编辑:上面清除了术语和目的。

结论:命令 = CommandGivenEvents,“事件” = BusinessLogicProcessedAndStoredEvents。不同的目的。就像如果您更改事件处理程序一样,投影数据会有所不同。如果您更改业务逻辑,命令将产生不同的事件流。高了一级。

于 2020-10-18T05:51:21.920 回答