我想知道在使用某些事件源解决方案重播事件时将事件应用于状态时应该包含哪些逻辑。
具体来说,我想知道验证,比如说我有一个可以处于以下状态之一的实体:
- 已记录
- 积极的
- 关闭
- 取消
而进度需要Logged->Active->Close或者Logged->Active->Cancelled,比如不能直接从Logged跳转到Close。
现在,我理解,验证应该包含在命令中:UpdateState
将检查实体当前状态是否允许转换到所需的状态,并产生适当的事件StatusUpdated
,该事件将持久保存到事件存储中。
问题是,回放时我应该怎么做?我应该只更新状态,还是应该执行相同的验证(这样如果状态转换要求发生变化,除非我们添加一些额外的逻辑,否则无法加载一些以前更新的实体),以确保我们不会最终得到不满足我们当前逻辑的实体?
PS。我认为我在理解它时遇到了问题,因为在我的理解中,事件本质上只是“宣布”已经发生的事情(并且发送者状态已经被修改),以便有趣的各方可以做出相应的反应。并且在事件加载/重播的情况下,您需要更改所述状态而不是实际“宣布”任何事情......