天天看點

DDD之領域服務與領域事件

領域服務

領域中的服務表示一個無狀态的操作,它用于實作特定于某個領域的任務。這裡我們要搞清楚什麼樣的操作需要實體,值對象,什麼樣的操作需要采用領域服務。

另外,領域服務不是應用服務,在應用服務中我們不需要處理業務邏輯,業務邏輯都落在領域服務中。

領域服務發現:

  • 執行一個顯著的業務操作過程
  • 對領域對象進行轉換
  • 以多個領域對象作為輸入進行計算,産生一個值對象。

    過度使用領域服務将會産生一個貧血模型,例如資料模組化時,我們的實體常用隻含有get/set方法,所有的業務邏輯都包含在了service。這樣導緻service變成了一個大泥球。注意區分領域服務與實體,值對象行為。

領域事件

領域事件通常是用來與其他聚合解耦的,采用觀察者模式,一個聚合訂閱另外一個聚合的事件。

如果是同一個限界上下文時,通常采用程序内的消息釋出領域事件,具體實作可以參考我的這篇部落格《Spring Data實作領域事件》

如果是在不同限界上下文時,我們可以采用消息中間件,比如rocket mq,kafka進行消息的訂閱與釋出。

上一篇:《DDD之如何合理設計一個聚合》

下一篇:《DDD之工廠》

繼續閱讀