일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 코틀린
- 만들면서배우는클린아키텍처
- Java
- DDD
- Spring
- 계층형아키텍처
- 유지보수
- Boot Legacy 차이점
- 개발방법론
- web
- 스터디
- 추상화 설계
- 아키텍처
- Thymeleaf
- 조영호
- 헥사고날아키텍처
- Kotlin
- 책스터디
- 함수형프로그래밍
- 객체지향의사실과오해
- 테스트주도개발
- GrokkingFunctionalProgramming
- 이펙티브코틀린
- 클린아키텍처
- 도메인 주도 개발 시작하기
- 테스트
- 개발서적
- template
- TDD
- FP
- Today
- Total
김동형수 개발기
도메인 주도 개발 시작하기 - 7장 본문
7장 도메인 서비스
7.1
한 애그리거트로 기능을 구현할 수 없을 때가 있다.
한 애그리거트에 넣기 애매한 도메인 기능을 억지로 특정 애그리거트에 구현하면 안 된다.
책임 범위를 넘어서는 기능을 구현하면 외부에 대한 의존이 높아지고 코드를 복잡하게 만든다.
애그리거트의 범위를 넘어서는 도메인 개넘이 애그리거트에 숨어들어 명시적으로 드러나지 않게 된다.
가장 쉬운 방법은 도메인 기능을 별도 서비스로 구현하는 것
7.2
도메인 서비스
- 계산 로직 : 여러 애그리거트가 필요한 계산 로직이나, 한 애그리거트에 넣기 다소 복잡한 계산 로직
- 외부 시스템 연동이 필요한 도메인 로직 : 구현하기 위해 타 시스템을 사용해야 하는 도메인 로직
애매한 도메인 개넘을 구현하려면 도메인 서비스를 이용해서 도메인 개념을 명시적으로 드러낸다.
도메인 서비스는 상태 없이 로직만 구현
도메인 서비스를 구현하는데 필요한 상태는 다른 방법으로 전달 받는다.
서비스를 사용하는 주체는 애그리거트가 될 수도, 응용서비스가 될 수도 있다.
애그리거트 객체에 도메인 서비스를 전달하는 것은 응용 서비스 책임이다.
도메인 서비스 객체를 애그리거트에 주입하는 건 저자는 좋은 방법이 아니라고 생각한다고 한다.
도메인 서비스 객체를 애그리거트에 의존 주입할 이유는 없다.
애그리거트 메서드를 실행할 때 도메인 서비스를 인자로 전달하지 않고 반대로 도메인 서비스의 기능을 실행할 때 애그리거트를 전달하기도 한다.
도메인 로직을 수행하고 응용로직을 수행하진 않는다.
도메인 서비스를 판단하는 기준 - 애그리거트의 상태변경, 애그리거트의 상태 값을 계산
외부시스템이나 타 도메인과 연동 기능도 도메인 서비스가 될 수 있다.
시스템 간 연동은 HTTP API 호출로 이루어질 수 있지만, 도메인 입장에서는 도메인 로직으로 볼 수 있다.
도메인 서비스는 도메인 영역에 위치한다.
명시적 구분을 하고 싶다면 하위 패키지를 구분하여 위치시켜도 된다.
도메인 서비스의 로직이 고정되어 있지 않은 경우 도메인 서비스 자체를 인터페이스로 구현, 도메인 로직을 외부 시스템이나 별도 엔진을 이용해서 구현할 때 인터페이스와 클래스를 분리하게 된다.
도메인 서비스의 구현이 특정 기술에 의존하거나 외부 시스템의 API를 실행한다면 도메인 영역의 도메인 서비스는 인터페이스로 추상화
'책 스터디 > [완료] DDD - 도메인 주도 개발 시작하기' 카테고리의 다른 글
도메인 주도 개발 시작하기 - 9장 (0) | 2023.05.11 |
---|---|
도메인 주도 개발 시작하기 - 8장 (0) | 2023.04.26 |
도메인 주도 개발 시작하기 - 6장 (0) | 2023.04.06 |
도메인 주도 개발 시작하기 - 5장 (0) | 2023.03.30 |
도메인 주도 개발 시작하기 - 4장 (0) | 2023.03.23 |