Skip to content

Instantly share code, notes, and snippets.

@sungjaeHong
Created February 4, 2018 08:40
Show Gist options
  • Save sungjaeHong/bab992996eb7dddd70b1844dfbfebe37 to your computer and use it in GitHub Desktop.
Save sungjaeHong/bab992996eb7dddd70b1844dfbfebe37 to your computer and use it in GitHub Desktop.
DDD(1/n)

도메인 영역의 주요 구성요소 앞서 네 영역에 대해 설명하면서 도메인 영역은 도메인의 핵심 모델을 구현한다고했다. 도메인 영역의 모델은 도메인의 주요 개녀을 표현하며 핵심이 되는 로직을 구현한다. 1장에서 살펴본 entity와 value타입은 도메인 영역의 주요 구성요소이다. 이 두 요소와 함께 도메인 영역을 구성하는 요소는 아래와 같다.

엔티티 : 고유의 실벽자를 갖는 객체로 자신의 라이프사이클을 갖는다. 주문(Order), 회원(Member), 상품(Product)과 같이 도메인의 고유한 개념을 표현한다. 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.

밸류 : 고유의 식별자를 갖지 않는 객체로 주로 개념적인 하나의 도메인 객체의 속성을 표현할 때 사용한다. 배송지 주소를 표현하기 위한 주소(Address)나 구매 금액을 위한 금액(Money)과 같은 타입이 밸류타입이다. 엔티티의 속성으로 사용될 뿐만 아니라 다른 밸류 타입의 속성으로도 사용될 수 있다.

애그리거트 : 애그리거트는 관련된 엔티티와 밸류 객체를 개념적으로 하나로 묶은 것이다. 예를 들어 주문과 관련된 Order엔티티, OrderLine밸류, Orderer밸류 객체를 '주문' 애그리거트로 묶을 수 있다.

리포지터리 : 도메인 모델의 영속성을 처리한다. 예를들어 DBMS테이블에서 엔티티 객체를 로딩하거나 저장하는 기능을 제공한다.

도메인 서비스 : 특정 엔티티에 속하지 않은 도메인 로직을 제공한다. '할인 금액 계산'은 상품, 쿠폰, 회원등급, 구매금액 등 다양한 조건을 이용하여 구현하게 되는데, 이렇게 도메인 로직이 여러 엔티티와 백류를 필요로 할 경우 도메인 서비스에서 로직을 구현한다.

DB table Entity vs Domain Model Entity

  • 도메인 엔티티는 데이터와 함께 도메인 기능을 제공한다.

    ex) 주문엔티티는 주문과 관련된 데이터와 배송지 변경 등의 기능을 제공한다.

  • 도메인 엔티티는 두개 이상의 데이터가 개념적으로 하나일 경우 밸류타입을 이용해 표현할 수 있다.

    ex) 주문에닡티에서 주문자를 표현하는 Orderer를 밸류타입으로 표현할 수 있다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment