我可以想到兩個地方將域邏輯放在事件源系統中,或者有一個缺點。事件採購:何處放置業務邏輯
- 在創建事件後在本地調用的聚合的事件處理程序。 (這是我在大多數examples中看到的,雖然他們大多數都有非常簡單的邏輯)
問題:存儲在事件存儲器中併發布給訂閱者的事件不包含此處理的數據,因此在投影時同一邏輯必須應用於該事件。 - 創建活動之前。現在處理的數據可以存儲在事件中,並且投影不必知道任何有關業務邏輯的信息。 (我在示例中沒有看到這種方法)
問題:在這種情況下,儘管事件只包含可能導致信息丟失的已處理數據。
更糟糕的是:由於事件數據已經計算出來,我也放棄了通過重播事件來糾正錯誤的業務邏輯的可能性。
示例:從某些數據計算度量標準。
要麼我必須計算兩次公式(一次在域模型中,一次在投影中)
或者我必須在發送事件並將其包括在內之前計算它。
修復計算問題被一些人明確描述爲一項好處。請參閱此處:「修復錯誤您可能會發現導致系統計算錯誤值的編碼錯誤,而不是修復編碼錯誤並對存儲的數據項執行有風險的手動調整,您可以修復編碼錯誤並重放事件流,以便系統根據新版本的代碼正確計算值。「 (從https://msdn.microsoft.com/en-us/library/jj591559.aspx#sec2) 但除此之外,謝謝澄清。 – hybridtupel
如果計算髮生在讀取模型的投影中 - 這確實有意義。事件中的計算適用於變更聚合狀態不變。 –