일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Java8
- spring
- spring boot
- Design Pattern
- ddd
- Java 8 in action
- head first
- 클린코드
- 자바8
- jsp
- Java
- domain
- Clean Code
- Was
- Java8 in action
- Template Method Pattern
- 자바8인액션
- 자바의 신
- spring Batch
- 패스트캠퍼스
- 스트림
- Stream
- SERVLET
- web
- 자바
- AWS101
- CQRS
- 디자인 패턴
- facade pattern
- Java in action
Archives
- Today
- Total
주난v 개발 성장기
[DDD START!] 5장. 리포지터리의 조회 기능 본문
repository는 애그리거트의 저장소
find 메서드 정의로 조회를 할 수 있지만, 너무 많아지고 조합이 다양할 경우 스펙(Specification)을 이용
스펙(specification)은 애그리거트가 특정 조건을 충족하는지 여부를 검사
public interface Speficiation<T> {
public boolean isSatisfiedBy(T aggregation);
}
public class OrdererSpec implements Specification<Order> {
private String orderId;
public OrdererSpec(String ordererId) {
this.ordererId = ordererId;
}
@Override
public boolean isSatisfiedBy(Order order) {
return order.getOrderId().getMemberId().getId().eqauls(orderId);
}
}
조합되 스펙을 다시 조합해서 더 많은 스펙을 만들 수 있다.
하지만, 이는 메모리에 로딩한 후 루프를 돌면서 스펙을 검사하는 것으로 느리다.
-> CriteriaBuilder, Predicate를 이용해서 검색 조건을 구현한다.
라퍼지터리 구현 기술 의존
도메인 모델은 구현 기술에 의존하지 않아야 한다.!!!
그런데...Specification 인터페이스는 toPredicate()가 Root와 CriteriaBuilder에 의존하고 있으므로, 이미 JPA에 의존하는 모양이 된다.
-> 이를 해결하려면, 추상화를 해야하는데 repository 구현 기술의 변화는 드물기 때문에, 이점이 크지 않다.
조회 전용 기능 구현
리포지터리는 애그리거트의 저장소를 표현하는 것으로 다음 용도로 사용하는 것은 적합하지 않다.
- 여러 애그리거트를 조합해서 한 화면에 보여주는 데이터 제공
- 각종 통계 데이터 제공
애초에 이런 쿼리는 조회 전용 쿼리로 처리해야 하는 것이다.
동적 인스턴스 생성, @Subselect, 네이티브 쿼리를 이용해서 구현할 수 있다.
'개발 성장기 > DDD' 카테고리의 다른 글
[DDD START!] 7장 도메인 서비스 (0) | 2020.05.29 |
---|---|
[DDD START!] 6장. 응용 서비스와 표현 영역 (1) | 2020.05.26 |
[DDD START!] 4장. 리포지터리와 모델 구현 (0) | 2020.05.19 |
[DDD START!] 3장. 애그리거트 (0) | 2020.05.15 |
[DDD START!] 2장. 아키텍처 개요 (0) | 2020.05.07 |