특정 기술(JPA)에 의존하지 않는 애플리케이션 서비스 만들기

image.png

OrderServiceOrderReposotory에 의존하고 있어서 OrderReposotory의 코드에 변경이 일어나면 OrderService도 바꿔야 됨

D

I

P 적용

image.png

  1. 인터페이스에 의존하도록 만들기
  2. OrderReposotory 는 JPA용 OrderReposotor 로 변경(JPAOrderReposotory)
  3. 상위 모듈인 Application Layer에 인터페이스를 둬야지 전체 의존 관계가 하위 모듈이 상위 모듈에 의존하는 방식으로 변경 됨

OrderService 기능 테스트

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = OrderConfig.class)
class OrderServiceSpringTest {
    @Autowired
    OrderService orderService;

    @Test
    public void createOrder() throws Exception {
        var order = orderService.createOrder("0100", BigDecimal.ONE);

        Assertions.assertThat(order.getId()).isGreaterThan(0);
    }
}