/ddd-essence-aggregate-group

[practice] aggregate group association implementation

Primary LanguageJava

넥스트스텝 - 도메인 주도 설계의 사실과 오해

목적


구현 내용 및 조건

  • 애그리게이트 그룹을 정의한다.
  • 애그리게이트 루트 단위로 관리한다. (Query, Command)
  • 리포지토리는 애그리게이트 루트만 가진다.
  • 애그리게이트 그룹간에는 이벤트로 통신한다.
  • 엔티티가 가진 책임을 구분하여 값 객체 및 값 컬렉션을 만들어 위임한다.

구현 상세

1. 애그리게이트 그룹 정의

  • 사용자
  • 메뉴
  • 가게
  • 장바구니
  • 주문

2. 애그리게이트 루트 단위로 관리

  • 사용자
    • 사용자 (root)
  • 장바구니
    • 장바구니 (root)
    • 장바구니 옵션
    • 장바구니 옵션 그룹
    • 장바구니 상품
  • 메뉴
    • 메뉴 (root)
    • 메뉴 옵션
    • 메뉴 옵션 그룹
  • 주문
    • 주문 (root)
    • 주문 상품
  • 가게
    • 가게 (root)
    • 가게 운영 시간

3. 리포지토리는 애그리게이트 루트만 가진다.

  • UserJpaRepository
  • CartJpaRepository
  • MenuJpaRepository
  • OrderJpaRepository
  • StoreJpaRepository

4. 애그리게이트 그룹간에는 이벤트로 통신

  • 단계1. 애그리게이트 그룹내에서만 조회/변경이 일어나도록 구현
  • 단계2. 애그리게이트 그룹간에 이벤트 통신이 일어나도록 구현

5. 엔티티가 가진 책임을 구분하여 값 객체 및 값 컬렉션을 만들어 위임

  • 값 객체
    • 메뉴 옵션
    • 주문 메뉴 옵션
    • 주문 옵션
    • 장바구니 옵션