2017-09-18 55 views
1

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

请考虑这种情况:我有一个基于任务的用户界面,其中每个操作都会生成一个命令,创建一个或多个事件。

用户可以在某个点启动一个进程,例如生成一个名为ProcessStarted的事件。从那里他将能够对总量进行更改,从而产生其他事件。

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

如果过程恢复,则可以对聚合进行更多操作,但不能考虑在从ProcessStartedProcessReverted事件的过程中同时发生的事件。

因此,当聚集体再水化我想:

  • 所有从一开始的时候考虑采取的活动;
  • 所有事件从ProcessStartedProcessReverted事件都被忽略;
  • 之后的所有事件ProcessReverted要考虑的事件。

什么是达到我的目标的最佳方法?我无法想象一个在ES环境下优雅和适合的解决方案。

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

回答

2

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

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

+0

我确实知道你的建议。这似乎是最合乎逻辑的解决方案。谢谢 – user449689

+0

@ user449689欢迎您! –