Back-End/도메인 주도 개발 시작하기

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

ChaSso 2024. 4. 1. 21:14

Chapter 7 도메인 서비스

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

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

 

7.2 도메인 서비스

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

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

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

 

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

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

 

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

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

 

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

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