領域服務
領域中的服務表示一個無狀态的操作,它用于實作特定于某個領域的任務。這裡我們要搞清楚什麼樣的操作需要實體,值對象,什麼樣的操作需要采用領域服務。
另外,領域服務不是應用服務,在應用服務中我們不需要處理業務邏輯,業務邏輯都落在領域服務中。
領域服務發現:
- 執行一個顯著的業務操作過程
- 對領域對象進行轉換
-
以多個領域對象作為輸入進行計算,産生一個值對象。
過度使用領域服務将會産生一個貧血模型,例如資料模組化時,我們的實體常用隻含有get/set方法,所有的業務邏輯都包含在了service。這樣導緻service變成了一個大泥球。注意區分領域服務與實體,值對象行為。
領域事件
領域事件通常是用來與其他聚合解耦的,采用觀察者模式,一個聚合訂閱另外一個聚合的事件。
如果是同一個限界上下文時,通常采用程序内的消息釋出領域事件,具體實作可以參考我的這篇部落格《Spring Data實作領域事件》
如果是在不同限界上下文時,我們可以采用消息中間件,比如rocket mq,kafka進行消息的訂閱與釋出。
上一篇:《DDD之如何合理設計一個聚合》
下一篇:《DDD之工廠》