2017-09-18 58 views
1

我目前正在使用事件採購的項目。這是我第一次使用ES,因此有時我不知道我用來解決某些問題的方法是否正確。事件採購:忽略事件的正確方法

請考慮這種情況:我有一個基於任務的用戶界面,其中每個操作都會生成一個命令,創建一個或多個事件。

用戶可以在某個點啓動一個進程,例如生成一個名爲ProcessStarted的事件。從那裏他將能夠對總量進行更改,從而產生其他事件。

他可以繼續下去,或者,如果他願意,他可以在開始上述過程之前在最後一個事件中恢復聚合狀態,例如生成名爲ProcessReverted的事件。

如果過程恢復,則可以對聚合進行更多操作,但不能考慮在從ProcessStartedProcessReverted事件的過程中同時發生的事件。

因此,當聚集體再水化我想:

  • 所有從一開始的時候考慮採取的活動;
  • 所有事件從ProcessStartedProcessReverted事件都被忽略;
  • 之後的所有事件ProcessReverted要考慮的事件。

什麼是達到我的目標的最佳方法?我無法想象一個在ES環境下優雅和適合的解決方案。

我在這裏沒有發佈任何代碼,因爲我沒有在尋找實現細節,但我正在尋找一種策略,我希望從比我更有經驗的人那裏得到一些建議,我希望這會幫助我更好地理解如何利用ES的強大功能和靈活性。

回答

2

您應該在您的聚合中執行此操作,方法是每次應用ProcessStarted事件時都會存儲狀態的快照;當應用ProcessReverted時,整個狀態將被快照中保存的狀態替換。這很簡單,因爲事件是總是以它們發出的順序應用。

因此,不需要外部組件或基礎架構服務,它只是內部聚合邏輯。

+0

我確實知道你的建議。這似乎是最合乎邏輯的解決方案。謝謝 – user449689

+0

@ user449689歡迎您! –