모든 객체는 생성되어 다양한 상태를 거친 후 저장 or 소멸되는 생명주기 존재
그림 6-1 도메인 객체의 생명주기
도메인 객체의 관리와 관련된 문제
이러한 문제를 세 가지 패턴으로 해결
AGGREGATE(집합체)
소유권과 경계를 정확히 정의함으로써 객체 간의 연관관계 혼란 X
FACTORY(팩터리)
복잡한 객체와 AGGREGATE를 생성하고 재구성함으로써 그것들의 내부 구조를 캡슐화
REPOSITORY(리파지터리)
생명주기의 중간, 마지막을 다루며, 거대한 관련 인프라스트럭처를 캡슐화하면서 영속 객체를 찾아 조회하는 수단 제공
연관관계를 최소주의 관점에서 설계하면 탐색이 단순해지고 폭발적으로 증가하는 관계를 제한하는 데는 도움
그러나 업무 도메인은 상호 연관의 정도가 높으므로 결국 객체 참조를 통해 관계망 추적
핵심
모델 내에서 복잡한 연관관계를 맺는 객체를 대상으로 변경의 일관성을 보장하기란
쉽지 않다. 그 까닭은 단지 개별 객체만이 아닌 서로 밀접한 관계에 있는
객체 집합에도 불변식이 적용돼야 하기 때문이다. 그렇다고 변경의 일관성을 보장하고자
신중 잠금 기법(cautious locking scheme)을 쓴다면 다수의 사용자가 서로
부적절하게 간섭해서 시스템이 사용할 수 없는 상태가 될 것이다.
모델 내의 참조에 대한 캡슐화를 추상화할 필요
AGGREGATE는 우리가 데이터 변경의 단위로 다루는 연관 객체의 묶음
각 AGGREGATE에는 루트와 경계가 있다
경계: AGGREGATE에 무엇이 포함되고 포함되지 않는 지를 정의
루트: 단 하나만 존재하며 AGGREGATE에 포함된 특정 ENTITY
경계 안의 객체는 서로 참조가능하지만, 바깥은 루트만 참조 가능
그림 6-2 지역 및 전역 식별성과 객체 참조
불변식은 데이터가 변경될때마다 유지돼야 하는 일관성 규칙 의미
여러 AGGREGATE에 걸쳐 존재하는 규칙은 언제나 최신 상태로 유지되는 것은 아니다
다른 의존 관계는 이벤트 처리, 배치 처리, 혹은 다른 갱신 메키니즘을 토대로 특정 시간내에 해결
한 AGGREGATE에 적용된 불변식은 각 트랜잭션이 완료될 때 이행될 것
그림 6-3 AGGREGATE의 불변식
개념적 AGGREGATE를 구현하려면 모든 트랜잭션에 적용되는 다음과 같은 규칙 필요
ENTITY와 VALUE OBJECT를 AGGREGATE로 모으고 각각에 대해 경계 정의