3.1 애그리거트


복잡한 도메인을 이해하고 관리하기 쉬운 단위로 만들려면 상위 수준에서 모델을 조망할 수 있는 방법이 필요한데 그 방법이 바로 애그리거트다.

애그리거트는 모델을 이해하는데 도움을 줄 뿐 아니라 일관성을 관리하는 기준도 된다. 모델들을 에그리거트 기준으로 관리하기 때문에 복잡한 도메인을 단순한 구조로 만들어준다.

애그리거트 경계를 설정할 때 기본이 되는것은 도메인 규칙과 요구사항이다. 도메인 규칙에 따라 함께 생성되는 구성요소는 한 애그리거트에 속할 가능성이 높다.

3.2 애그리거트 루트


애그리거트는 여러 객체로 구성되기 때문에 한 객체만 정상상태이면 안된다. 애그리거트에 속한 모든 객체가 정상 상태를 가져야 도메인 규칙을 지킬 수 있다.

애그리거트에 속한 모든 객체가 일관된 상태를 유지하려면 애그리거트 전체를 관리할 주체가 필요한데 이 책임을 지는 것이 바로 애그리거트 루트 이다.

애그리거트 루트를 통해서만 도메인 로직을 구현하게 만들려면 도메인 모델에 대해 다음 두가지 습관을 적용해야한다.

  1. 단순 필드를 변경하는 메서드를 public으로 만들지 않는다.

    → 일관성이 깨지는 문제를 잡아준다.

  2. 밸류 타입은 불변으로 구현한다.

3.3 리포지터리와 애그리거트