✨ BASIC PROJECT RULE ✨
- 애그리게이트 경계 내에서 비즈니스 **불변성(Invariants)**을 보호해야한다
- 다른 애그리게이트은 **식별자(ID)**로만 참조해야한다
- *애그리게이트 루트(Root)**를 통해서만 내부에 접근해야한다
- 하나의 트랜잭션에서는 하나의 애그리게이트만 수정해야한다
- 애그리게이트은 가능한 작게 유지해야한다
- 일관성 모델을 명확히 하라.
- *리포지토리(Repository)**는 애그리게이트 단위로 존재한다.
- 애그리게이트 간의 상호작용은 도메인 이벤트를 활용하라.
- 진정한 불변식을 기반으로 애그리게이트을 설계하라.
✨ VALUE OBJECT RULE ✨
- 생성 시점에 **유효성 검증(Validation)**을 수행한다.
- 사물의 속성을 측정하거나 기술(Describe)한다.
- *불변성(Immutability)**을 가진다.
- 속성 기반의 동등성(Equality) 비교를 한다.(eq, hash를 재정의 해야한다.)
- 자체적으로 관련된 로직을 포함할 수 있다 (값 객체와 관련된 규칙과 계산들만)
- *대체 가능성(Replaceability)**을 가진다.
- 다른 객체(엔티티 또는 값 객체)의 속성으로 사용된다.