도메인 영역의 주요 구성요소 앞서 네 영역에 대해 설명하면서 도메인 영역은 도메인의 핵심 모델을 구현한다고했다. 도메인 영역의 모델은 도메인의 주요 개녀을 표현하며 핵심이 되는 로직을 구현한다. 1장에서 살펴본 entity와 value타입은 도메인 영역의 주요 구성요소이다. 이 두 요소와 함께 도메인 영역을 구성하는 요소는 아래와 같다.
엔티티 : 고유의 실벽자를 갖는 객체로 자신의 라이프사이클을 갖는다. 주문(Order), 회원(Member), 상품(Product)과 같이 도메인의 고유한 개념을 표현한다. 도메인 모델의 데이터를 포함하며 해당 데이터와 관련된 기능을 함께 제공한다.
밸류 : 고유의 식별자를 갖지 않는 객체로 주로 개념적인 하나의 도메인 객체의 속성을 표현할 때 사용한다. 배송지 주소를 표현하기 위한 주소(Address)나 구매 금액을 위한 금액(Money)과 같은 타입이 밸류타입이다. 엔티티의 속성으로 사용될 뿐만 아니라 다른 밸류 타입의 속성으로도 사용될 수 있다.
애그리거트 : 애그리거트는 관련된 엔티티와 밸류 객체를 개념적으로 하나로 묶은 것이다. 예를 들어 주문과 관련된 Order엔티티, OrderLine밸류, Orderer밸류 객체를 '주문' 애그리거트로 묶을 수 있다.
리포지터리 : 도메인 모델의 영속성을 처리한다. 예를들어 DBMS테이블에서 엔티티 객체를 로딩하거나 저장하는 기능을 제공한다.
도메인 서비스 : 특정 엔티티에 속하지 않은 도메인 로직을 제공한다. '할인 금액 계산'은 상품, 쿠폰, 회원등급, 구매금액 등 다양한 조건을 이용하여 구현하게 되는데, 이렇게 도메인 로직이 여러 엔티티와 백류를 필요로 할 경우 도메인 서비스에서 로직을 구현한다.
DB table Entity vs Domain Model Entity
-
도메인 엔티티는 데이터와 함께 도메인 기능을 제공한다.
ex) 주문엔티티는 주문과 관련된 데이터와 배송지 변경 등의 기능을 제공한다.
-
도메인 엔티티는 두개 이상의 데이터가 개념적으로 하나일 경우 밸류타입을 이용해 표현할 수 있다.
ex) 주문에닡티에서 주문자를 표현하는 Orderer를 밸류타입으로 표현할 수 있다.