定義:
實體不僅需要知道它是什麼,還要知道它是哪個,值物件只關心它是什麼。
實體:許多物件不是由它們的屬性來定義,而是通過一系列的連續性和標識來從根本定義的。只要乙個物件在生命週期中能夠保持連續性,並且獨立於它的屬性(即使這些屬性對系統使用者非常重要),那它就是乙個實體。
值物件:當你只關心某個物件的屬性時,該物件便可以作為乙個值物件。為其新增有意義的屬性,並賦予它相應的行為。我們需要將值物件看成不變物件,不要它任何身份標識,還應該盡量避免像實體物件一樣的複雜性。
對於實體,實體核心是用唯一的識別符號來定義,而不是通過屬性定義。即使屬性完全相同的也可能是不同的物件。同時實體本身是由狀態的,實體有嚴謹的生命週期,實體本身會體現出相關的業務行為,業務行為會被實體屬性或狀態造成影響和改變。
值物件本身無狀態,不可變,並且不分配具體的標識。本身無生命週期,也不會產生獨立行為。
舉個栗子:
1、手機由sn號識別,手機是乙個實體。手機的配件這種場景下就是值物件。
2、體育場的座位,門票上有座位號,座位號可以最為唯一標識,座位是實體。但是如果門票沒有座位號,先到先做,座位沒有座位號,只有數量,坐乙個少乙個,這時候座位就是值物件。
值物件的使用目的:
使用不變的值物件使得我們做更少的職責假設。
值物件用於度量和描述事物,ddd中建議盡量使用值物件來建模而不是實體物件,因為值物件非常容易的進行建立、測試、使用、優化和維護。
值物件的特徵:
1、它度量或者描述了領域的一件東西。
2、它可以作為不變數。
3、它可以將土撥桿的相關的屬性結合成乙個概念整體。
4、當度量和描述發生改變的時候,可以用另乙個值物件替換。
5、它可以和其他值物件進行相等比較
6、它不會對協作物件造成***
最小化整合:
ddd專案中,通常存在多個限界上下文,這意味著我們需要找到合適的方法對這些上下文進行整合。當模型概念從上流上下文流入下游上下文時,盡量使用值物件表示這些概念。這樣可以達到最小化整合,即可以最小化下游模型中用於管理職責的屬性數數目。使用不便的值物件使得我們做更少的職責假設。
聚合與聚合根
定義了物件之間清晰的關係和邊界,並實現領域模型的內聚。
必須將聚合作為乙個修改資料的單元。
乙個聚合必須有乙個聚合根,根是聚合中的乙個實體,通常聚合中其他實體需要依賴於聚合根,其他實體不能沒有聚合根而存在,從業務的角度看它是沒有單獨存在的意義。
對乙個聚合中的實體的訪問和操作,必須通過這個聚合的聚合根開始,確保一致性規則。例如訂單的總金額依賴每個訂單項的總和。
乙個聚合只有乙個聚合根,聚合根是可以獨立存在的,聚合中其他實體或者值物件依賴聚合根。
只有聚合根才能被外部訪問到。
針對功能模組進行系統劃分,粒度太粗,使用聚合可以精確劃分粒度。
實體 值物件 聚合
定義 實體不僅需要知道它是什麼,還要知道它是哪個,值物件只關心它是什麼。實體 許多物件不是由它們的屬性來定義,而是通過一系列的連續性和標識來從根本定義的。只要乙個物件在生命週期中能夠保持連續性,並且獨立於它的屬性 即使這些屬性對系統使用者非常重要 那它就是乙個實體。值物件 當你只關心某個物件的屬性時...
實體與值物件
實體 在時間上有連續性,並且有唯一標識可以來區分的物件。值物件 用來描述事物的,不區分誰是誰的,不可變的物件。判斷乙個物件是實體還是值物件,還要根據它在具體的業務領域中的實際意義來決定,比如 體育館裡的座位,當業務領域這樣規定,一張門票對應乙個特定的座位,即每個座位都應該嚴格區分誰是誰,觀眾在選擇座...
開發規範實體和值物件
寫實體類的時候 預設多對一的一方要寫,特殊情況才不寫 預設一對多的一方不用寫,特殊才寫 例如 entity table name t device access accesstype.field public class device extends baseentity 設定裝置狀態編號。詳細說明...