DDD 領域物件與領域服務

2021-09-11 04:16:47 字數 1339 閱讀 7852

什麼是領域物件

什麼是領域服務

領域物件的行為,與領域服務的行為區別

為什麼把這麼小的點拿出來講,最開始在討論中領域物件與領域服務時,覺得行為放在service/entity中區別不大,只是乙個放置位置的問題,並不影響到**的抽象和復用,所以沒有實行。但是最近在推動產品進行ddd業務建模,發現這個問題非常重要,關係到**是否清晰表達了業務,這個也是我們進行ddd的初衷。

領域物件

聚合根,實體,值物件

領域的資料與行為,

資料和行為應該與業務產品上的行為關聯。領域物件通常是有狀態的,理想情況下,我們的領域物件行為應該和產品業務定義意義對映 觀點

首先需要對概念明確定義,因為ddd其實是做了乙個問題的分治,所以必然會導致在某些情況下,會有單薄這個說法。就像垂直架構中dao/manager/service層區分一樣。在初期我們可以明確按照概念來放置**,當大家達成共識,深刻理解了這些概念時,沒有其中一層也無所謂了。

舉個例子

eg. 乙個bad case

三個模型:a,b,c,他們之間存在狀態變更流動。

整理出來的狀態變更圖

這些方法都在處理狀態,反應不了業務的情況

一般包含以下邏輯

不應該做的事

領域物件不應該與其他的模型有互動,如manager(資源層管理),不應該持久化資料

如何持久化不應該是領域物件關心的。

領域服務通常是領域物件的呼叫方,是微服務架構下,領域物件對外提供的方式。

aservice

// 構建領域物件

final listaggr = mamanager.listbyuserids(userval);

final aentity entity = collectionutils.isempty(aggr) ? null : aggr.get(0)

.geta();

// 呼叫領域物件方法

DDD之領域服務與領域事件

領域中的服務表示乙個無狀態的操作,它用於實現特定於某個領域的任務。這裡我們要搞清楚什麼樣的操作需要實體,值物件,什麼樣的操作需要採用領域服務。另外,領域服務不是應用服務,在應用服務中我們不需要處理業務邏輯,業務邏輯都落在領域服務中。領域服務發現 領域事件通常是用來與其他聚合解耦的,採用觀察者模式,乙...

DDD 領域服務的規約模式

回到目錄 規 約 specification 模式 第一次看到這東西是在microsoft nlayer專案中,它是微軟對ddd的解說,就像petshop告訴了我們mvc如何使用一樣,這個規約模式最重要的作用是實現了查詢語句與查詢條件的 分離,查詢語句在底層是穩定的,不變的,而查詢條件是和具體業務,...

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

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