事件采购:忽略事件的正确方法

时间:2017-09-18 20:10:31

标签: event-sourcing

我目前正在开展一个使用事件采购的项目。这是我第一次使用ES,因此有时我不知道用于解决某些问题的方法是否正确。

考虑这种情况:我有一个基于任务的UI,每个动作产生一个命令,创建一个或多个事件。

在某个时刻,用户可以启动一个过程,比如说生成一个名为ProcessStarted的事件。从那里他将能够对聚合进行更改,从而产生其他事件。

他可以继续,或者,如果他愿意,他可以在他开始上述过程之前在最后一个事件中恢复聚合的状态,比如说生成一个名为ProcessReverted的事件。

如果恢复了该流程,则可以对聚合进行更多操作,但不得考虑从ProcessStartedProcessReverted事件在流程中同意的事件。

因此,当聚合物重新水合时,我想:

  • 从考虑开始的所有事件开始;
  • 要忽略ProcessStartedProcessReverted个事件的所有事件;
  • 考虑ProcessReverted事件后的所有事件。

实现目标的最佳方法是什么?我想不出一个优雅且适合ES环境的解决方案。

我不是在这里发布任何代码,因为我不是在寻找实施细节,但我正在寻找一个策略,我希望得到一些比我更有经验的人的建议,我希望这会有所帮助我更好地了解如何利用ES的强大功能和灵活性。

1 个答案:

答案 0 :(得分:2)

您应该在聚合中执行此操作,方法是每次应用ProcessStarted事件时存储状态快照;当应用ProcessReverted时,整个状态将被快照中保存的状态替换。这很简单,因为事件总是按照它们发出的顺序应用。

因此,不需要外部组件或基础架构服务,它只是内部聚合逻辑。