1.聚合根、實體、值對象的區別?spa
從標識的角度:對象
聚合根具備全局的惟一標識,而實體只有在聚合內部有惟一的本地標識,值對象沒有惟一標識,不存在這個值對象或那個值對象的說法;生命週期
從是否只讀的角度:class
聚合根除了惟一標識外,其餘全部狀態信息都理論上可變;實體是可變的;值對象是隻讀的;引用
從生命週期的角度:di
聚合根有獨立的生命週期,實體的生命週期從屬於其所屬的聚合,實體徹底由其所屬的聚合根負責管理維護;值對象無生命週期可言,由於只是一個值;ant
2.聚合根、實體、值對象對象之間如何創建關聯?co
聚合根到聚合根:經過ID關聯;管理
聚合根到其內部的實體,直接對象引用;
聚合根到值對象,直接對象引用;
實體對其餘對象的引用規則:
①能引用其所屬聚合內的聚合根、實體、值對象;
②能引用外部聚合根,但推薦以ID的方式關聯,另外也能夠關聯某個外部聚合內的實體,但必須是ID關聯,不然就出現同一個實體的引用被兩個
聚合根持有,這是不容許的,一個實體的引用只能被其所屬的聚合根持有;
值對象對其餘對象的引用規則:只需確保值對象是隻讀的便可,推薦值對象的全部屬性都儘可能是值對象;
3.如何識別聚合與聚合根?
明確含義:一個Bounded Context(界定的上下文)可能包含多個聚合,每一個聚合都有一個根實體,叫作聚合根;
識別順序:先找出哪些實體多是聚合根,再逐個分析每一個聚合根的邊界,即該聚合根應該聚合哪些實體或值對象;最後再劃分Bounded Context;
聚合邊界肯定法則:根據不變性約束規則(Invariant)。不變性規則有兩類:
①聚合邊界內必須具備哪些信息,若是沒有這些信息就不能稱爲一個有效的聚合;
②聚合內的某些對象的狀態必須知足某個業務規則;