我有一個問題如何處理一個傳奇,其中使 的決定取決於創建傳奇之前所公佈的一個事件。佐賀依賴於事件從過去
這是說明我的問題的示例:
想象我有一個CustomerAR和OrderAR。當customerAR是 創建了一個驗證過程開始,這個過程的結果是 量的訂單,客戶是免費無特殊 授權的花費。我不會詳細討論這個過程,因爲 它與上下文無關。在計算金額時,命令將以計算的金額 發送到CustomerAR,並且客戶AR 發佈具有該值的事件(CustomerMaxOrderAmountEvent)。所以 非常好。
然後幾個星期後,客戶下了訂單。 OrderAR是 創建並啓動我的OrderSaga。該事件等待,直到完全創建訂單 ,然後必須作出決定是否需要爲該訂單發送 AutorizationCommand。要做出該決定,必須知道如果CustomerMaxOrderAmountEvent已發佈且值爲 的金額爲 。通常OrderSaga也會訂閱 CustomerMaxOrderAmountEvent,但問題是這個事件永遠不會發生,因爲它已經在過去發生過。
我應該如何處理這個問題。我應該查詢讀取模型知道 價值,我應該發送一個命令來獲取值,我應該做一個 參考CustomerAR,我要重播所有的歷史事件 傳奇,所以他知道歷史了。
UPDATE
請注意,這是關於這個概念不是這個具體的例子。這個例子純粹是爲了澄清問題:「兩個不相關的聚合根不屬於同一個有界的上下文。」
感謝您的幫助。
梅爾文
謝謝你的回答。我同意這是針對這種特定情況的可能解決方案。但是,當兩個聚合根不屬於相同的有界環境或不具有直接關係時,情況如何呢?首先這是不可能的,但我們也希望在事件中放入不相關的數據,因爲一些傳奇需要這些數據。根據DDD,我不應該由誰來監聽或處理事件來考慮我的AR。它應該提供與事件相關的數據而不是事件的處理者。 – llMll
我已更新我的回答以反映您的評論。 – kstaruch
我同意你的第二個選擇。這實際上是我現在正在做的事情,但不知何故是不正確的,但我可能是錯的。我也同意這樣的事實,即我必須根據事件中的數據做出決定,但這是我想要的。只有這個活動在過去發表過。我不能完全遵循你關於多重傳奇的觀點,以及這將如何在這種情況下有所幫助。我仍然必須根據不包含我需要做出該決定的數據的事件做出決定。我希望你能爲我清除最後一點。 – llMll