DDD와 전술 패턴

Domain Driven Design

  • DDD에서 소개하는 전술 패턴을 사용하면 도메인 영역에 도메인 로직을 집중시키는데 도움이 된다.

구성요소와 설명

  • Entity
    • 각 엔티티 객체는 고유의 식별자 가지며, 각 엔티티는 식별자로 구분됨.
    • 내부 상태가 바뀌어도 식별자는 불변.
    • 예를 들어 주문 엔티티는 서로 다른 주문번호를 식별자로 가진다.
  • Value
    • 밸류는 고유 식별자 없으며 개념적인 값 표현.
    • 금액, 배송 주소 같은 값. 값은 불변으로 하는것 추천.
  • Aggregate
    • 애그리거트는 관련된 객체를 묶어 하나의 개념적인 단위로 표현.
    • 예를 들어 주문 애그리거트는 Order Entity, OrderLine Value 집합, ShippingAddress Value로 구성될 수 있다.
    • 애그리거트는 모델의 일관성을 처리하는 단위.
  • Repository
    • 도메인 객체를 물리적인 저장소와 연결할때 사용하는 모델이 레포지토리.
    • 도메인 객체를 저장하고 조회할 때 사용되는 인터페이스를 제공함.
    • 리포지토리는 애그리거트 단위로 존재한다.
  • Domain Service
    • 특정한 애그리거트에 속하지 않은 로직을 구현.
    • 외부 연동이 필요한 도메인 로직도 도메인 서비스로 사용해서 표현
  • Domain Event
    • 도메인 내에서 발생한 이벤트 표현.
    • 도메인의 상태가 변경될 때 도메인 이벤트가 발생함.
    • 도메인 이벤트는 주로 다른 부분에 변화를 알리기 위해 사용된다.

  • DDD는 도메인 로직을 애그리거트 단위로 묶는다.
  • 복잡한 모델을 애그리거트 단위로 관리할 수 있게하여 복잡도 낮추고, 애그리거트에 관련 로직 모아 응집도 높인다.
  • 전술패턴 외에도 바운디드 컨텍스트는 도메인 간 경계를 설정해줌.