應用服務和領域服務

2022-06-12 17:03:12 字數 651 閱讀 7791

在領域驅動設計中,service有兩種:領域服務和應用服務,單純從它們的定義來看,兩者很容易區分,前者是與業務邏輯密切相關的服務,往往處理複雜的業務請求。後者則是面向應用角度的一些支援功能,與業務本身並無太大關聯。一些典型的應用服務有:傳送電子郵件通知使用者,對密碼進行加密解密等等。在oobbs中,要在導航欄中顯示當前位置的路徑(乙個像:index->forum1->thread1的路徑)也是由乙個應用層面的服務負責的。但是正如《領域驅動設計》一書所說的,實際上,區分領域服務和應用服務是一件很困難的事件,因為很多時候乙個服務既有應用相關的東西,又有業務方面的內容,就像上面提到的例子,路徑本身也反映了業務物件之間的層次關係,因此這個應用服務也必然要涉及到領域模型的一些細節。

過去曾經糾結過是否應該提供兩個服務層,下層的領域服務層屬於領域模型的一部分,上層的應用服務層屬於應用層。但是這個方案在實踐中被漸漸地否定了。一方面,正如上面所說的,應用服務並不是凌駕於業務層之上的一層服務,某些時候它們相互獨立,不存在相互的依賴關係,而更多的時候,它們是糅合合在一起乙個整體,很難再進行細分,也沒有必要再這樣做。如果真得強行劃分出應用服務層和領域服務層,那麼大多數應用層服務將只能是對領域層服務的簡單呼叫。最根本的原因還是剛才提到的,應用服務和領域服務沒有上下之分,要麼相對獨立,要麼揉合在一起。因此,系統應該只提供乙個統一的服務層即可。

dddsample 

DDD 領域服務與應用服務的區別?

問 領域服務的職責是什麼?答 誇聚合例項業務邏輯。沒辦法合理放到實體中的其它業務邏輯。問 領域服務的設計原則是什麼?答 用來組織業務邏輯。面向業務邏輯。細粒度。內部檢視看系統。乙個請求對應多個服務的多個方法。服務之間會存在依賴。問 應用服務的職責是什麼?跨bounded context業務邏輯。dt...

DDD理論學習系列(8) 應用服務 領域服務

ddd理論學習系列 案例及目錄 單從字面理解,不管是領域服務還是應用服務,都是服務。而什麼是服務?從soa到微服務,它們所描述的服務都是乙個寬泛的概念,我們可以理解為服務是行為的抽象。從字首來看,根據ddd的經典分層架構,它們又隸屬於不同的層,應用服務屬於應用層,領域服務屬於領域層。領域層 doma...

DDD理論學習系列(8) 應用服務 領域服務

ddd理論學習系列 案例及目錄 單從字面理解,不管是領域服務還是應用服務,都是服務。而什麼是服務?從soa到微服務,它們所描述的服務都是乙個寬泛的概念,我們可以理解為服務是行為的抽象。從字首來看,根據ddd的經典分層架構,它們又隸屬於不同的層,應用服務屬於應用層,領域服務屬於領域層。領域層 doma...