애그리거트란?
- 관련된 객체를 하나로 묶은 군집
- 도메인이 커질수록 개발할 도메인 모델도 커지면서 엔티티와 밸류가 많아질수록 모델은 점점 복잡해진다.
- 개별 도메인 모델에만 집중하다 보면 큰 수준에서 모델을 이해하지 못해 큰 틀에서 모델을 관리 할 수 없게 된다.
- 도메인 모델을 개별 객체뿐만 아니라 상위 수준에서 모델을 볼 수 있어야 이해하는데 도움이 된다.
- 그러므로 애그리거트로 관련된 객체를 묶어 전체적인 모델의 이해를 돕는다.
애그리거트 구성할때 주의할점!
- 한 애그리거트에 속한 객체는 다른 애그리거트에 속하지 않는다.
- 각 애그리거트는 독립적이며 자기 자신만 관리할 뿐 다른 애그리거트를 관리하지 않는다.
- 함께 생성되고 제거되는 구성요소는 한 애그리거트에 속할 가능성이 높다.(같은 라이프 사이클)
- 함께 변경되는 빈도가 높은 객체는 한 애그리거트에 속할 가능성이 높다.
- 'A가 B를 갖는다' 로 설계할때 반드시 A와 B가 애그리거트에 속한다는것은 아니다.
- 예를 들어 상품에 리뷰가 달릴수 있지만 함께 생성되지 않고 변경되지 않는다.
- 게다가 리뷰를 작성하는 주체는 고객이다.
- 대체로 다수의 애그리거트는 한개의 엔티티 객체만 갖는 경우가 많다.
- 두 개 이상의 엔티티로 구성되는 애그리거트는 드물게 존재
애그리거트 루트 엔티티
- 애그리거트에 속한 모든 객체는 일관된 상태를 유지하려면 애그리거트 전체를 관리할 주체가 필요하다.
- 이 전체를 관리하고 책임지는 주체를 루트 엔티티라고 한다.
- 애그리거트에 속한 객체는 루트 엔티티에 직접 또는 간접적으로 속한다.