2013-08-07 21 views
6

我想知道是否可以發佈事件而不是從聚合中拋出異常。說,我有一個領域,要求只有一定年級的學生才能報名參加體育比賽。如果我對不滿足條件的學生調用EnrollForSports,那麼聚合是否應該拋出異常或發佈事件,特別是如果其他聚合或流程管理者對流程的結果感興趣?CQRS - 域例外與特殊情景的事件

如果發佈了一個事件,這是否意味着即使該事件不會改變聚合的狀態,也不需要相應的內部事件處理程序來處理重放時的事件?

如果拋出異常,其他方如何得到通知?命令處理程序能捕獲異常並引發事件嗎?事件是否可以由命令處理程序提出?

回答

5

主要來說,一個命令應該是有效的和執行,或無效,不執行。生成錯誤事件的想法讓你處於中間的某個位置,對發送命令的人的反饋是模棱兩可的,並且延遲了。這也是您的域名中不必要的複雜性。如果拋出異常,它將作爲即時反饋給客戶端發送命令的代碼。

+5

的即時反饋當然只工作,如果異常同步引發,而不是某處複雜的傳奇或進程管理器中創建一個後續的級聯線事件和命令。 –