애그리거트

애그리거트는 관련된 객체를 하나의 군으로 묶은 것이다.

애그리거트는 도메인 규칙에 따라 구성요소가 정해진다.

애그리거트는 변경에 있어 다른 애그리거트에게 영향을 주지 않는다.

애그리거트는 도메인에 대한 이해가 높을 수록, 크기가 작아진다.

애그리거트 루트

애그리거트 내부 객체의 수정은 모두 애그리거트 루트를 거쳐서 진행되어야한다!

이렇게 하지 않으면 도메인의 일관성이 깨질 수 있다.

도메인 내부의 객체를 변경하는 로직을 수행하는 것은 애그리거트 루트만 실행할 수 있도록 하기 위해서 메서드를 protected로 설정한다.

하나의 트랜잭션에서는 하나의 애그리거트만 수정하자.

하나 이상의 애그리거트를 수정하게 되면, 잠금 대상이 많아지므로 성능을 떨어뜨린다.

리포지토리와 애그리거트

애그리거트 당 리포지토리는 하나여야한다.

애그리거트를 저장하면, 애그리거트 전체를 저장소에 영속화해야한다.

애그리거트의 상태가 변경되면, 모든 변경을 원자적으로 저장소에 반영해야 한다.