領域服務和領域事件如何取捨?或共存?

wilsonp發表於2014-06-26
各位大大,當業務功能涉及到多個聚合的時候,有多種方式進行處理,其中有兩種方式使用比較普遍,一種是領域服務,另一種是領域事件,也不排除兩種同時存在的情況,那如何取捨呢?
一個系統中很多業務功能都會涉及到2個或多個聚合,如果使用領域服務,將會導致在領域層會存在大量的領域服務類,這種方式實現的效果同傳統的三層框架中的服務層實現的效果差不多,唯一區別只在於領域服務是將具體的業務邏輯放到領域物件中,而服務層是將所有的業務邏輯直接寫在服務層中;
更好的方式是採用傳送領域事件的方式,即沒有領域服務,當一個業務功能涉及到多個聚合的時候,透過同步事件來進行聚合之間的互動,拿CQRS來說,領域物件中的業務邏輯是由命令處理器來呼叫的,當一個業務設計到聚合A-->聚合B-->聚合C三個聚合,但聚合A處理完相應的業務邏輯後,修改自身狀態,然後傳送領域事件到事件匯流排,然後由事件匯流排將這個事件立即分發到聚合B,並依次到聚合C,那就意味這在聚合A執行業務邏輯之前,必須手動地將聚合B和C同時註冊到事件匯流排中(這個註冊必須在之前的命令處理器中進行),當所有業務邏輯都處理完成之後再將其進行反註冊,以取消B和C對A產生事件的關注。
不知以上我的理解有無問題?歡迎大家批評指正

[該貼被wilsonp於2014-06-26 15:56修改過]

相關文章