먼저 우리는 모델 내의 참조에 대한 캡슐화를 추상화할 필요가 있다. AGGREGATE는 우리가 데이터 변경의 단위로 다루는 연관 객체의 묶음을 말한다. 각 AGGREAGTE는에는 루트(root)와 경계(boundary)가 있다. 경계는 AGGREGATE에 무엇이 포함되고 포함되지 않는지를 정의한다. 루트는 단 하나만 존재하며, AGGREAGTE에 포함된 특정 ENTITYT를 가리킨다. 경계 안의 객체는 서로 참조할 수 있지만, 경계 바깥의 객체는 해당 AGGREGATE의 구성요소 가운데 루트만 참조할 수 있다. 루트 이외의 ENTITY는 지역 식별성(local identity)을 지니며, 지역 식별성은 AGGREGATE 내에서만 구분되면 된다. 이는 해당 AGGREGATE의 경계 밖에 위치한 객체는 루트 ENTITY의 컨텍스트 말고는 AGGREAGTE의 내부를 볼 수 없기 때문이다. (도메인 주도 개발 - Eric evans)
불변식은 데이터가 변경될 때마다 유지돼야 하는 일관성 규칙을 뜻하며, 여기엔 AGGREGATE를 구성하는 각 구성요소 간의 관계도 포함될 것이다. 그러나 여러 AGGREGATE에 걸쳐 존재하는 규칙이 언제나 최신 상태로 유지되는 것은 아니다. 다른 의존 관계는 이벤트 처리, 배치 처리, 혹은 다른 갱신 메커니즘을 토대로 특정 시간 내에 해결할 수 있다. 반면, 한 AGGREGATE에 적용된 불변식은 각 트랜잭션이 완료될 때 이행될 것이다. (도메인 주도 개발 - Eric evans)
루트 ENTITY는 전역 식별성을 지니며 궁극적으로 불변식을 검사할 책임이 있다. (도메인 주도 개발 - Eric Evans)
각 루트 ENTITY는 전역 식별성을 지닌다. 경계 안의 ENTITY는 지역 식별성을 지니며, 이러한 지역 식별성은 해당 AGGREGATE안에서만 유일하다. (도메인 주도 개발 - Eric Evans)
AGGREGATE의 경계 밖에서는 루트 ENTITY를 제외한 AGGREGATE 내부의 구성요소를 참조할 수 없다. 루트 ENTITY가 내부 ENTITY에 대한 참조를 다른 객체에 전달해 줄 수는 있지만 그러한 객체는 전달받은 참조를 일시적으로만 사용할 수 있고, 참조를 계속 보유하고 있을 수는 없다. 루트는 VALUE OBJECT의 복사본을 다른 객체에 전달해줄 수 있으며, 복사본에서는 어떤 일이 일어나든 문제되지 않는다. 이것은 복사본이 단순한 VALUE에 불과하며 AGGREGATE와는 더는 연관관계를 맺지 않을 것이기 때문이다. (도메인 주도 개발 - Eric Evans)
지금까지의 규칙을 바탕으로 결론을 내려보면 데이터베이스 질의를 이용하면 AGGREGATE의 루트만 직접적으로 획득할 수 있다. 다른 객체는 모두 AGGREGATE를 탐색해서 발견해야 한다. (도메인 주도 개발 - Eric Evans)
AGGREGATE 안의 객체는 다른 AGGREGATE의 루트만 참조할 수 있다. (도메인 주도 개발 - Eric Evans)
삭제 연산은 AGGREGATE 경계 안의 모든 요소를 한 번에 제거해야 한다. (도메인 주도 개발 - Eric Evans)
AGGREGATE 경계 안의 어떤 객체가 변경하더라도 전체 AGGREGATE의 불변식은 모두 지켜져야 한다. (도메인 주도 개발 - Eric Evans)
ENTITY와 VALUE OBJECT를 AGGREGATE로 모으고 각각에 대해 경계를 정의하라. 한 ENTITY를 골라 AGGREGATE의 루트로 만들고 AGGREGATE 경계 내부의 객체에 대해서는 루트를 거쳐 접근할 수 있게 해라. AGGREGATE 밖의 객체는 루트만 참조할 수 있게 하라. 내부 구성요소에 대한 일시적인 참조는 단일 연산에서만 사용할 목적에 한해 외부로 전달될 수 있다. 루트를 경유하지 않고는 AGGREGATE의 내부를 변경할 수 없다. 이런식으로 AGGREGATE의 각 요소를 배치하면 AGGREGATE안의 객체와 전체로서의 AGGREGATE의 상태를 변경할 때 모든 불변식을 효과적으로 이행할 수 있다. (도메인 주도 개발 - Eric Evans)
우리는 경합이 높은 지점을 느슨하게 하고, 엄격한 불변식을 더욱 지켜지게 하는 모델을 찾을 필요가 있다. (도메인 주도 개발 - Eric Evans)