반응형
네 개의 영역
표현(UI) 영역
- 사용자의 요청을 받아 응용 영역에 전달
- 응용 역영의 처리 결과를 다시 사용자에게 보여주는 역활
응용(Application) 영역
- 시스템이 사용자에게 제공해야 할 기능을 구현
- 예를들어 주문등록, 주문취소, 상품상세조회 등등
- 기능을 구현하기 위해 도메인 영역의 도메인 모델을 사용한다.
- 로직을 직접 수행하지 보다는 도메인 모델에 로직 수행을 위임한다.
도메인(Domain) 영역
- 도메인의 핵심 로직을 구현한다.
- 예를들어 주문 도메인인 경우 배송지 변경, 결제완료, 주문총액계산 등등
인프라스트럭처(Infrastructure) 영역
- 구현 기술에 대한 것을 다룬다.
- RDBMS 연동을 처리하고, 메시징 큐에 메시지를 전송하거나 수신하는 기능을 구현
- HBase, 몽고DB등을 사용하여 데이터베이스와 연동한다.
- SMTP를 이용한 메일 발송 기능을 구현하거나 HTTP 클라이언트를 이용해 REST API를 호출하는 것도 처리한다.
모듈 구성
- 각 애그리거트와 모델과 지포지터리는 같은 패키지에 위치시킨다.
- 예를 들어, 주문과 관련된 Order, OrderLine, Orderer, OrderRepository 등은 com.my.project.order.domain 패키지에 위치시킨다.
- 모듈 구조를 얼마나 세분화해야 하는지에 대해 정해진 규칙은 없다.
- 다만 한 패키지에 너무 많은 타입이 몰려서 코드를 찾을 때 불편한 정도만 아니면 된다.
- 한 패기지에 가능하면 10개 미만으로 타입 개수를 유지하려고 노력한다.
영역별로 별도로 패키지로 구성한 모듈 구조
- com.my.project
- ui
- application
- domain
- infrastructure
도메인이 크면 하위 도메인 별로 모듈을 나눈 구조
- com.my.project
- order
- ui
- application
- domain
- infrastructure
- product
- ui
- application
- domain
- infrastructure
- order
하위 도메인을 하위 패키지로 구성한 모듈 구조
- com.my.project
- order
- product
- ui
- application
- domain
- product
- category
- infrastructure
도메인이 복잡할때 도메인 모델과 도메인 서비스를 별도로 패키지한 구조
- com.my.project
- order
- product
- ui
- application
- order
- product
- domain
- order (애그리거트 위치)
- product (애그리거트 위치)
- service (도메인 서비스 위치)
- infrastructure
반응형
'DDD' 카테고리의 다른 글
이벤트(Event) 개요 (0) | 2021.09.15 |
---|---|
JPA를 위한 스펙 구현 (0) | 2021.09.15 |
도메인 영역의 주요 구성요소 (0) | 2021.09.15 |
응용(Application) 영역과 표현(UI) 영역 (0) | 2021.09.15 |
도메인(Domain) 모델에 지켜야할것! (0) | 2021.09.15 |