DDD之3實體和值對象

image.png

圖中是一個別墅的模型,表明實體,能夠真實的看獲得。那麼在DDD設計方法論中,實體和值對象是什麼呢?程序員

背景

實體和值對象是領域模型中的領域對象,是組成領域模型的基礎單元,一塊兒實現實體最基本的核心領域邏輯。編程

那麼問題來了:微服務

1, 他兩在領域模型中的做用是什麼?學習

2,在系統中跟代碼模型和數據模型是怎麼對應的?spa

搞清楚這兩個問題很重要。回答問題是須要有知識基礎的,先來捋清楚這兩個概念的定義和內涵。而後在小結部分咱們來回答這兩個問題。設計

實體

定義: DDD中的一類對象,擁有惟一標識符,經歷各類狀態變動後仍然能夠保持一致,對這類對象而言,重要的是延續性和標識,(對象的延續性和標識能夠超出軟件的生命週期)而非屬性。cdn

形態:不一樣的設計過程當中,形態不一致。 對象

file

值對象

定義:經過對象的屬性值來識別的對象是值對象,它將多個相關屬性組合爲一個概念總體。它是沒有標識符的對象;
**blog

特色:值對象描述了領域中的一件東西,這個東西是不可變的,它將不一樣的相關屬性組合成了一個概念總體,當度量和描述改變的時候,它能夠用另一個值對象替換,並進行相等性比較而不會帶來反作用;
**
**
簡單來講: 值對象本質就是一個集合;
**
意義:領域建模過程當中,值對象能夠保證屬性歸類的清晰和概念的完整性;
**
image.png
**
**生命週期

上圖中: 若是把省市區地址放在人員實體中,會顯得屬性不少很零碎。 推薦的作法是把省市區地址構成一個集合,即地址值對象;

file

file

例子:人員地址案例;

file

缺點:若是實體引用的值對象過多,會致使實體堆積一批缺少概念完整性的屬性,值對象失去了業務含義,操做起來不方便;

實體PK值對象

file

DDD提倡從領域模型設計出發,而不是先設計數據模型;

小結

首先明確了實體和值對象的概念,以及在不一樣的設計階段的形態。而後經過一個例子展現了實體和值對象的概念和使用;

這是一個從業務模型向系統模型落地過程,考驗的是設計能力,咱們應該結合本身的業務場景,選擇合適的方法進行微服務設計。

最後我來回答一下在背景部分拋出的兩個問題?

1, 實體和值對象在領域模型中的做用是什麼?

2,在系統中跟代碼模型和數據模型是怎麼對應的?

通過上面的分析,個人回答以下:

file

但願你們都理解好DDD的實體和值對象,設計出高度靈活的代碼;

原創不易,關注誠難得,轉發價更高!轉載請註明出處,讓咱們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各類資源,關注公衆號‘李福春持續輸出’,發送'學習資料'分享給你!
李福春持續輸出公衆號二維碼
相關文章
相關標籤/搜索