圖中是一個別墅的模型,表明實體,能夠真實的看獲得。那麼在DDD設計方法論中,實體和值對象是什麼呢?程序員
實體和值對象是領域模型中的領域對象,是組成領域模型的基礎單元,一塊兒實現實體最基本的核心領域邏輯。編程
那麼問題來了:微服務
1, 他兩在領域模型中的做用是什麼?學習
2,在系統中跟代碼模型和數據模型是怎麼對應的?spa
搞清楚這兩個問題很重要。回答問題是須要有知識基礎的,先來捋清楚這兩個概念的定義和內涵。而後在小結部分咱們來回答這兩個問題。設計
定義: DDD中的一類對象,擁有惟一標識符,經歷各類狀態變動後仍然能夠保持一致,對這類對象而言,重要的是延續性和標識,(對象的延續性和標識能夠超出軟件的生命週期)而非屬性。cdn
形態:不一樣的設計過程當中,形態不一致。 對象
定義:經過對象的屬性值來識別的對象是值對象,它將多個相關屬性組合爲一個概念總體。它是沒有標識符的對象;
**blog
特色:值對象描述了領域中的一件東西,這個東西是不可變的,它將不一樣的相關屬性組合成了一個概念總體,當度量和描述改變的時候,它能夠用另一個值對象替換,並進行相等性比較而不會帶來反作用;
**
**
簡單來講: 值對象本質就是一個集合;
**
意義:領域建模過程當中,值對象能夠保證屬性歸類的清晰和概念的完整性;
**
**
**生命週期
上圖中: 若是把省市區地址放在人員實體中,會顯得屬性不少很零碎。 推薦的作法是把省市區地址構成一個集合,即地址值對象;
例子:人員地址案例;
缺點:若是實體引用的值對象過多,會致使實體堆積一批缺少概念完整性的屬性,值對象失去了業務含義,操做起來不方便;
DDD提倡從領域模型設計出發,而不是先設計數據模型;
首先明確了實體和值對象的概念,以及在不一樣的設計階段的形態。而後經過一個例子展現了實體和值對象的概念和使用;
這是一個從業務模型向系統模型落地過程,考驗的是設計能力,咱們應該結合本身的業務場景,選擇合適的方法進行微服務設計。
最後我來回答一下在背景部分拋出的兩個問題?
1, 實體和值對象在領域模型中的做用是什麼?
2,在系統中跟代碼模型和數據模型是怎麼對應的?
通過上面的分析,個人回答以下:
但願你們都理解好DDD的實體和值對象,設計出高度靈活的代碼;
原創不易,關注誠難得,轉發價更高!轉載請註明出處,讓咱們互通有無,共同進步,歡迎溝通交流。
我會持續分享Java軟件編程知識和程序員發展職業之路,歡迎關注,我整理了這些年編程學習的各類資源,關注公衆號‘李福春持續輸出’,發送'學習資料'分享給你!