[DDD] 도메인 주도 개발 시작하기 - 3장

Y_Sevin·2023년 7월 23일
0

3. 애그리거트


3.1 애그리거트

  • 객체 모델이 복잡해지면 구조나 도메인간의 관계를 파악하는 것이 어려워진다. 이는 코드를 변경하고 확장하는 것이 어려워진다는 것을 뜻함.
  • 애그리거트를 이용한다면, 복잡한 도메인을 연관된 객체로 묶어 도메인 간의 관계를 쉽게 파악할 수 있음
  • 애그리거트는 경계를 가짐
    - 도메인 규칙과 요구사항은 애그리거트의 경계를 설정하는 기준임
    - 함께 변경되는 빈도가 높은 객체는 한 애그리거트에 속할 가능성이 높음
    - A가 B를 갖는다로 해석할 수 있는 요구사항이 존재하더라도 이것이 반드시 A와 B가 한 애그리거트에 속한다는 것을 의미하는 것은 아님.

3.2 애그리거트 루트

  • 애그리거트 루트란 애그리거트에 속한 모든 객체가 일관된 상태를 유지하기위한 애그리거트 전체 관리 주체

  • 애그리거트 루트의 핵심 역할은 애그리거트의 일관성이 깨지지 않도록 지키는 것

  • 한 트랜잭션에서는 한 개의 애그리거트만 수정해야 하며 두 개 이상의 애그리거트를 수정해야할 경우 응용 서비스에서 두 애그리거트를 수정하도록 구현함

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

  • 애그리거트는 개념상 완전한 한 개의 도메인 모델을 표현하므로 객체의 영속성을 처리하는 리포지터리는 애그리거트 단위로 존재함

3.4 ID를 이용한 애그리거트 참조

  • 애그리거트는 서로 참조할 수 있음
    - ex) JPA - @ManyToOne, @OneToOne

  • 필드를 이용한 애그리거트 참조는 다음의 문제를 야기.

    1. 편한 탐색 오용
    2. 성능에 대한 고민
    3. 확장 어려움

    이중 가장 큰 문제는 편리함을 오용할 수 있다는 것

-> 이 문제를 해결하기 위해 ID 참조를 사용하여 간접참조형태로 변경
ID 참조를 통해서 결합도를 낮추고 응집도를 높일 수 있음

profile
매일은 아니더라도 꾸준히 올리자는 마음으로 시작하는 개발블로그😎

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

많은 도움이 되었습니다, 감사합니다.

답글 달기