728x90
도메인서비스
도메인 서비스 객체를 애그리거트에 주입하지 않기
public class Order {
@Authwired
private DiscountService discountService;
..
}
Service 필드는 데이터 자체와는 관련이 없다. 저장 대상도 아니다.
일부 기능만 필요로 하기 때문에 굳이 의존 주입을 할 이유는 없다.
public class Order{
public void calculate(DiscountService discountService, .. ) {
....
}
}
public class OrderService {
private DiscountService discountService;
private Order createOrder(....) {
// 사용하고 싶은 곳에 사용
this.discountService
}
}
도메인 서비스의 패키지 위치
주문 금액 계산을 위한 도메인 서비스는
주문 애그리거트와 같은 패키지에 위치한다.
도메인 서비스의 인터페이스와 클래스
도메인 서비스는 인터페이스로 추상화하여
도메인 영역이 특정 구현에 종속되는 것을 방지, 테스트가 쉬워지는 점이 있다.
외부 시스템과 연동시 나타나는 구조
public interface ProductRecService {
List<Product> getRec(Long id);
}
public class RecClient implements ProductRecService {
private ProductRepository productRepository;
@Override
public List<Product> getRec(Long id) {
List<RecommendationItem> items = getRecItems(id);
return toProducts(items);
}
private List<RecommendationItem> getRecItems(String id) {
// 외부 추천 시스템 API를 통해 가져오는 상황
return externalRecClient.getRecs(itemId);
}
private List<Product> toProducts(List<RecommendationItem> items) {
return items.stream()
..
}
}
toProducts 를 통해 해당 도메인에 맞게 모델 변환
변환(Translator) 클래스를 생성해서 변환을 처리해도 된다.
RecClient 는 외부 시스템과의 연동을 처리하는데 외부 시스템의 도메인 모델이 내 도메인 모델을 침범하지 않도록 막아주는 역할을 한다. 안티코럽션 계층이 된다.
참고: 도메인 주도 개발 시작하기
'Back-end > 벡엔드' 카테고리의 다른 글
리액티브 프로그래밍 Spring WebFlux - 디버깅, 테스팅 (0) | 2024.08.04 |
---|---|
리액티브 프로그래밍 Spring WebFlux를 이용한 Non Blocking 애플리케이션 구현 (0) | 2024.08.03 |
도메인 주도 개발 - 이벤트 (0) | 2024.05.15 |
내부망 프로젝트 - SAP HANA DB & Spring Boot (2) | 2024.01.10 |
내부망 프로젝트 - Offline 에서 Spring Boot 개발 Maven 레포지토리 (0) | 2023.10.15 |
댓글