도메인과 JPA 엔티티
도메인과 JPA 엔티티를 구분하려고 코드를 작성해봤습니다.
@Repository
@RequiredArgsConstructor
public class OrderRepositoryImpl implements OrderRepository {
private final OrderJpaRepository orderJpaRepository;
@Override
public void save(final OrderJpaEntity entity) {
orderJpaRepository.save(entity);
}
@Override
public Optional<OrderJpaEntity> findById(final long orderId) {
return orderJpaRepository.findById(orderId)
}
}
이러한 방식으로 JpaRepository를 주입받고 OrderRepository를 구현하는 방식입니다.
public interface OrderRepository {
void save(final OrderJpaEntity entity);
Optional<OrderJpaEntity> findById(final long orderId);
}
그런데 이때 변경감지를 사용하려면 Order가 아닌 OrderJpaEntity를 반환해야하는데 이렇게 하면 결국 Repository에도 JPA 엔티티에 의존하기 때문에 분리를 잘 하지 못했다는 생각이 듭니다..
혹시 도메인과 JPA 엔티티를 분리한다면 어떠한 방식으로 하시나요?
Answer 1
1
우선 개인적으로는 너무 완벽하게 JPA에 대한 의존을 제거하려고 노력하지 않아도 된다고 생각합니다. 큰 틀에서 구조를 깨뜨리지 않는 선에서 JPA에 의존하는 정도는 허용해도 괜찮다고 봅니다.
Order와 OrderJpaEntity를 꼭 분리해야 한다면 Order를 인터페이스나 추상 클래스로 만들고 OrderJpaEntity는 Order를 상속받는 구조를 가져가는 방법이 있습니다. 이때
리포지토리는 save나 find에서 Order 타입을 사용하고
리포지토리 인터페이스를 구현한 클래스는 내부적으로 OrderJpaEntity를 사용합니다.
유사한 방식으로 Order 인터페이스/추상 클래스가 있고, 이 Order를 상속받은 클래스가 내부에 필드로 JPA용 엔티티를 필드로 가져서 변경이 발생하면 전파하는 방법을 사용할 수도 있을 듯 합니다.
하지만 이렇게 해서 얻게 되는 실질적인 이점이 무엇이 있는지는 한 번 고민해 볼 필요가 있습니다.
패키지 구분에 대해 궁금한게 있습니다
0
11
1
스프링부트 서버 에러나요
0
17
1
코드 자료
0
26
2
조회속도 개선에서 더 개선하는 방법이 궁금합니다.
0
28
2
servlet과 container에 대한 질문입니다
0
24
1
RepositoryTest의 패키지 위치가 domain인 이유
0
30
2
도메인 모델에서 관계와 규칙을 구분하는 방법
0
37
2
16 강의 메세지 retryCount의 의도
0
23
2
JPA Repository 질문이 있습니다!
1
33
2
페이지네이션 처리를 쿼리에서 하는 방식 질문
1
36
1
UserService, CertificationService 책임 분리 기준 질문
0
26
1
spring initialiser 어떤걸 선택해야될지 모르겠어요
0
32
2
구현체가 동적으로 정해질 때, 팩토리 기법을 사용하나요?
0
51
2
Json 요청 처리
1
33
2
로그아웃-logout()-2 강에서 겟방식 로그아웃 호출 후 화면이동 질문입니다.
0
27
2
Build 관련 문제 (테스트 관련 문제)
0
43
2
job, step execution 관련 질문 드립니다.
0
32
2
git 링크 안들어가져요 404에러
0
458
1
JoinColumn 질문
0
442
1
1:N 매핑과 해당 방식 차이가 뭔가요?
0
494
2
10강 3:37 질문
0
319
1
7강에서 SecondaryTable을 왜 사용하지 모르겠습니다.
0
627
1
JPA 실무 @Entity을 @Embeddable 대체하는 경우가 많은가요?
0
542
1
상속 관계 엔티티 로직을 분기처리 하는 법?
0
356
1

