我正在實施使用事件採購的有界上下文,但遇到了問題。假設我正在模擬一場足球比賽,並且我對個人進球(得分等)和總成績感興趣。所以如果我有一個Match聚合根,我最好想要提出的事件叫做GoalScored和ScoreChanged。我希望從這個領域明確表達的分數的原因是,我不希望很多不同的聽衆和其他有界的上下文都計算相同的東西。事件採購鏈接事件
這看起來很簡單,但:匹配對象有一個Goal()方法,它添加了一個新的目標。本着事件採購的精神,這不會直接改變匹配狀態,但會引發一個在匹配中處理的GoalScored事件,然後突變狀態(以及將事件推送到非標準化器)。因此,就提高ScoreChanged而言,直到GoalScored事件得到處理之前,得分並沒有真正改變,那麼我是否會針對該事件引發另一個事件(ScoreChanged),從而有效地鏈接事件?我不這麼認爲,當一個聚合根從事件存儲庫重新加載時開始,每次都要創建大量額外的事件來響應每個GoalScored。
我也考慮過在提高GoalScored的命令處理程序中計算得分會是多少,會出現'假設'的情況。然後我可以在命令處理程序中引發這兩個事件。我真的寧願不這樣做 - 它看起來並不合適。製作足球比分足夠簡單,但其他比賽(例如板球)需要更多的工作。
我可以把目標和得分都放在GoalScored事件中,這足夠公平,但它看起來並不正確 - 得分與GoalScored事件本身無關。
討論事件採購時使用的所有示例似乎都使用電子商務客戶/訂單域,而我從未見過類似的情況。
有沒有人有處理這種情況的經驗?
感謝
是的我可能會只從一個方法發出這兩個事件。 該域確實有命令 - 至少如果我們正在說相同類型的命令。 StartMatch,PlayerSentOff等等。 最後一點,它看起來很像一個將事件流處理成更多事件的系統,當然也用於評分方面。 感謝您的回答。 – user303754