Chapter 07. 도메인 서비스

beanii·2023년 4월 2일
0

DDD Study

목록 보기
7/11
post-thumbnail

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


  • 한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안됨
    • 자신의 책임 범위 넘어가는 기능 구현
    • 코드 길어지고 복잡, 유지보수 힘듦
    • 외부 의존성 높아짐
    • 도메인 개념이 애그리거트에 숨어 명시적으로 드러나지 않게 됨

-> 도메인 기능을 별도 서비스로 구현


7.2 도메인 서비스


  • 도메인 서비스 사용하는 경우
    • 계산 로직: 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기에는 다소 복잡한 계산 로직
    • 외부 시스템 연동이 필요한 도메인 로직: 구현하기 위해 타 시스템을 사용해야 하는 도메인 로직

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

  • 도메인 서비스는 도메인 로직을 다룸, 응용 로직 수행하지 않음
  • 도메인 서비스는 상태 없이 로직만 구현함
  • 도메인 서비스를 구현하는 데 필요한 상태는 다른 방법으로 전달

  • 도메인 서비스의 주체는 애그리거트가 될 수도 있고 응용 서비스가 될 수 있음
  • 애그리거트 객체에 도메인 서비스를 전달하는 것은 응용 서비스 책임
  • 도메인 서비스의 기능 실행할 때 애그리거트 전달하는 방법도 있음

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

  • 외부 시스템이나 타 도메인과의 연동 기능도 도메인 서비스가 될 수 있음
  • 외부 시스템 연동 관점이 아닌 도메인 로직 관점에서 인터페이스 작성
  • 인터페이스 구현한 클래스는 인프라스트럭처 영역에 위치

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

  • 도메인 서비스는 다른 도메인 구성요소와 도일한 패키지에 위치
  • 도메인 서비스의 개수가 많거나 엔티티나 밸류와 같은 다른 구성 요소와 명시적으로 구분하고 싶으면 domain 패키지 밑에 domain.model, domain.service, domain.repository와 같이 하위 패키지로 구분

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

  • 도메인 서비스의 로직이 고정되어 있지 않은 경우 도메인 서비스 자체를 인터페이스로 구현
  • 특히 도메인 로직을 외부 시스템이나 별도 엔진 이용할 때
  • 도메인 서비스 인터페이스는 도메인 영역에, 실제 구현 클래스는 인프라스트럭처 영역에 위치

-> 도메인 영역이 특정 구현에 종속되는 것 방지하고 도메인 영역에 대한 테스트 쉬워짐

0개의 댓글

관련 채용 정보