2011-10-12 33 views
0

我知道數據總是陳舊。CQRS如何處理用戶的任務/陳舊的數據

什麼是處理工作流任務的方式,例如批准發票。該任務被允許由用戶執行一次。當這由異步服務處理時,它可能需要幾秒鐘(或更長時間)。與此同時,用戶可以再次批准相同的發票,因爲任務尚未在數據庫中更新。

有關此任何想法,讚賞。

回答

1

域模型必須強制執行一致性。寫入側的模型不應該被認爲是陳舊的,只有讀取側的投影。

如果批准事件尚未投影到讀取模型中,則無關緊要。但是,如果用戶發送基於陳舊數據的無效命令,則域模型需要知道已經發生了批准。

您的域的存儲庫應始終將聚合根處於其lates狀態(無論您是使用事件源還是某些基於狀態的持久性作爲SQL數據庫)。

+0

其他要考慮的事情;如果第二批准命令的最終結果與第一批批准命令的最終結果相同,則不需要拋出錯誤或拒絕該命令。只需使用該命令,不需要進行任何其他實體更改。 –