領域驅動設計中的聚合根和實體


1.聚合根、實體、值對象的區別?

從標識的角度:

  聚合根具有全局的唯一標識,而實體只有在聚合內部有唯一的本地標識,值對象沒有唯一標識,不存在這個值對象或那個值對象的說法;

從是否只讀的角度:

  聚合根除了唯一標識外,其他所有狀態信息都理論上可變;實體是可變的;值對象是只讀的;

從生命周期的角度:

  聚合根有獨立的生命周期,實體的生命周期從屬於其所屬的聚合,實體完全由其所屬的聚合根負責管理維護;值對象無生命周期可言,因為只是一個值;

 

2.聚合根、實體、值對象對象之間如何建立關聯?

  聚合根到聚合根:通過ID關聯;

  聚合根到其內部的實體,直接對象引用;

  聚合根到值對象,直接對象引用;

  實體對其他對象的引用規則:

    ①能引用其所屬聚合內的聚合根、實體、值對象;

    ②能引用外部聚合根,但推薦以ID的方式關聯,另外也可以關聯某個外部聚合內的實體,但必須是ID關聯,否則就出現同一個實體的引用被兩個

    聚合根持有,這是不允許的,一個實體的引用只能被其所屬的聚合根持有;

  值對象對其他對象的引用規則:只需確保值對象是只讀的即可,推薦值對象的所有屬性都盡量是值對象;

 

3.如何識別聚合與聚合根?

  明確含義:一個Bounded Context(界定的上下文)可能包含多個聚合,每個聚合都有一個根實體,叫做聚合根;

  識別順序:先找出哪些實體可能是聚合根,再逐個分析每個聚合根的邊界,即該聚合根應該聚合哪些實體或值對象;最后再划分Bounded Context;

  聚合邊界確定法則:根據不變性約束規則(Invariant)。不變性規則有兩類:

    ①聚合邊界內必須具有哪些信息,如果沒有這些信息就不能稱為一個有效的聚合;

    ②聚合內的某些對象的狀態必須滿足某個業務規則;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM