我有一段時間以來一直在思考的問題,我沒有找到一個好的解決方案。它關於CQRS和域邊界。命令執行中的額外邊界數據
假設我有一個背景,那就是關於爲系統進行預訂並最終發生事件。該系統允許將單個預訂鏈接到單個事件(已完成,沒有問題),並將每週預訂與一系列事件相關聯。每週預訂定義一週中的某一天(額外數據不相關);每週預訂總是有開始和結束的一天(半年)。
該系統還具有兩種類型的天:平常的日子,而不是工作日,其中不能舉辦的活動。
作爲一個企業要求用戶希望,每一週預約制單會取消上不工作日內保持特定事件。
其實預訂和事件存儲在兩個表中。存儲特殊標誌時會取消事件。我與時間表沒有關係,因爲我從未在商業環境中使用過它。作爲商業界限(與其他小數據,這裏不相關),到目前爲止,這是非常有效的。
這裏是我的問題:滿足用戶請求(創造每一天刪除的事件),我需要大約半年的日子信息(只是在同一個工作日的那些足夠)。但是,要獲得這些信息,我該如何繼續?
我可能的解決方案:
- 加載所有根實體半年的日子。這可能非常沉重,我必須擴展我的業務範圍。
- 預處理該命令,創建一個具有額外信息的命令。這將是一個命令命令,我讀過的東西很危險。對我而言足夠了。
- 使用無效天數列表擴展命令。我如何檢查一天是無效的?我必須訪問我的實際邊界以外的數據,這與1相同。
- 創建在命令處理程序中使用的服務以獲取非工作日的列表。天上下文信息將在共同(或共享)上下文中移動。
- 爲每週事件創建一個事件監聽器。創建每週事件時,它會加載非工作日的列表(針對該半年的那個工作日),並觸發一系列命令來取消特定日期。這將封閉邊界,不會將額外的數據添加到常見的上下文中,並重復使用相同的代碼(取消事件)以實現額外目的。
這將是最好的解決辦法?
因此,如果我理解正確的話你的建議,最後的選擇是最好的一個。兩個聚合,有兩個不同的目的,以及一個事件監聽器,用「不允許事件」列表「更新」每週預訂。 –