본문 바로가기
Back-End/도메인 주도 개발 시작하기

[DDD] 도메인 주도 개발 시작하기_Ch7

by ChaSso 2023. 4. 2.

Chapter 7 도메인 서비스

7.1 여러 애그리거트가 필요한 기능

∘  여러 개의 애그리거트가 필요한 경우가 있음 ex. 결제 금액 계산 로직의 경우 상품, 주문, 할인 쿠폰, 회원 애그리거트가 필요함
∘  복잡하다고 기능과 관련 없는 구성 요소가 있는 애그리거트에 기능을 넣으면 안 됨
∘  애그리거트가 자신의 책임 범위를 넘어서는 기능을 구현하게 되면 외부에 대한 의존이 높아지고 코드 수정이 어려워짐
∘  애그리거트가 여러 개 있을 때 기능을 어디에 구현할지에 대한 문제가 생기면 도메인 기능을 별도 서비스로 구현하면 됨

7.2 도메인 서비스

∘  도메인 서비스는 도메인 영역에 위치한 도메인 로직을 표현할 때 사용

7.2.1 계산 로직과 도메인 서비스

∘  특정 애그리거트에 넣기 어려운 도메인 개념은 도메인 서비스를 이용해서 명시적으로 나타내면 됨
∘  도메인 서비스는 상태 없이 로직만 구현함
∘  도메인 서비스에서 타입과 메서드의 이름은 도메인의 의미가 드러나는 용어로 지음
∘  도메인 서비스는 도메인 로직을 수행
∘  트랜잭션 처리 같은 응용 로직은 도메인 서비스가 아닌 응용 서비스에서 처리

 

7.2.2 외부 시스템 연동과 도메인 서비스

∘  외부시스템이나 타 도메인과의 연동 기능이 도메인 서비스가 될 수 있음

 

7.2.3 도메인 서비스의 패키지 위치

∘  도메인 서비스는 다른 도메인 구성요소와 동일한 패키징에 위치함
∘  도메인 서비스가 많아서 구분하고 싶으면 도메인에서 하위 패키지를 두면 됨

 

7.2.4 도메인 서비스의 인터페이스와 클래스

∘  도메인 서비스의 로직이 고정되어 있지 않은 경우 도메인 서비스 자체를 인터페이스로 구현하고, 그걸 구현한 클래스를 따로 둘 수 있음
∘  도메인 서비스의 구현이 특정 기술에 의존하거나 외부 시스템의 API를 실행한다면 도메인 서비스는 인터페이스로 추상화해야 됨 → 특정 구현에 종속하는 거 막음, 도메인 영역 테스트 쉬워짐