도메인 주도 개발 시작하기 애그리거트 ch3

김종완·2023년 10월 29일
1

애그리거트

애그리거트

  • 정의
    • 관련된 객체들을 모아 하나의 단위로 취급하는 개념이다.
    • 논리적으로 관련된 객체들을 그룹화하여 하나의 묶음으로 다룬다.
    • 쉽게 말해, 여러 개의 객체를 묶어 하나의 큰 객체로 다루는 것이다.
  • 장점
    • 상위 수준에서 모델을 정리하면 도메인 모델의 복잡한 관계를 이해하는 데 도움이 된다.
    • 유지 보수성 및 확장성을 높인다.
    • 데이터베이스 트랜잭션 처리를 단순화 하고, 일관성을 유지한다.
  • 예시
    • 주문 애그리거트: 주문, 주문 항목, 배송 정보
    • 고객 애그리거트: 고객, 주소, 계좌 정보
    • 제품 애그리거트: 제품, 재고, 가격

에그리거트 루트

  • 정의
    • 애그리거트 루트는 애그리거트를 대표하는 객체이다.
    • 애그리거트 루트는 애그리거트의 모든 객체에 대한 참조를 가지고 있다.
    • 에그리거트의 일관성을 책임진다.
  • 역할
    • 애그리거트의 경계를 정의한다. 애그리거트 루트는 애그리거트에 속한 객체와 속하지 않은 객체를 구분한다.
    • 애그리거트의 일관성을 유지한다. 애그리거트 루트는 애그리거트의 모든 객체가 애그리거트의 일관성 규칙을 준수하도록 보장한다.
    • 애그리거트 루트는 애그리거트 내부의 다른 객체를 조합해서 기능을 완성한다.
  • 예시
    • 주문 애그리거트의 경우, 주문 객체가 애그리거트 루트가 될 수 있다. 주문 객체는 주문 항목, 배송 정보 등의 객체에 대한 참조를 가지고 있다.
    • 고객 애그리거트의 경우, 고객 객체가 애그리거트 루트가 될 수 있다. 고객 객체는 주소, 계좌 정보 등의 객체에 대한 참조를 가지고 있다.
    • 제품 애그리거트의 경우, 제품 객체가 애그리거트 루트가 될 수 있다. 제품 객체는 재고 정보, 가격 정보 등의 객체에 대한 참조를 가지고 있다.

애그리거트와 리포지터리

  • 정의
    • 애그리거트를 저장하고 조회하는 역할을 하는 인터페이스
  • 구현
    • 어떤 기술로 리포지토리를 구현하느냐에 따라 애그리거트 구현도 영향을 받는다.
  • 주의사항
    • 애그리거트의 상태가 변경되면 모든 변경을 원자적으로 저장소에 반영해야 한다.
profile
개발에 재미를 느끼며 꾸준히 성장하는 개발자 김종완 입니다.

0개의 댓글