7. 도메인 서비스

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

 

상품, 주문 , 회원 애그리거트가 각각 있다고 가정할 때 실 결제 금액을 계산하기 위해서는 앞서 나열된 애그리거트를 모두 사용은 해야한다.그렇다면 실 결제 금액을 계산하는 책임을 가지는 애그리거트는 무엇일까?

그나마 가장 관련이 조금이라도 더 있는 애그리거트가 책임을 가져야 할까?

 

결론적으로 한 애그리거트에 넣기 애매한 도메인 기능을 특정 애그리거트에 억지로 구현하면 안된다. 책임 범위를 넘어서는 기능을 구현하기 때문에 코드가 길어지고 외부에 대한 의존성도 높아질 수 있기 때문이다.

그리고 도메인 개념이 애그리거트에 숨어들어서 명시적으로 드러나지 않게된다.

 

이를 해소할 가장 쉬운 방법은 도메인 서비스를 별도로 구현하는 것이다.

 

 

도메인 서비스

 

도메인 서비스는 도메인 영역의 애그리거트나 밸류와는 다르게 상태 없이 로직만 구현한다는 특징이 있다.

그리고 도메인 의미가 드러나는 타입과 메서드 이름을 가진다.

 

참고로 도메인 서비스의 구현이 특정 구현 기술에 의존적이거나 시스템의 API를 실행한다면 도메인 서비스는 도메인 영역에 인터페이스로 추상화하고 구현체는 인프라스트럭쳐 영역에 두어 도메인 서비스가 특정 구현에 종속되는것을 아래의 그림과 같이 방지할 수 있다. 

 

 

 

'📚 Book > DDD Start!' 카테고리의 다른 글

6. 응용서비스와 표현영역  (0) 2020.08.09
3. 애그리거트  (4) 2020.07.19
2. 아키텍처 개요  (2) 2020.07.12
1. 도메인 모델 시작  (0) 2020.07.01