도서/도메인 주도 개발 시작하기

[DDD] DIP란??

뇌장하드 2022. 6. 27. 21:14

만약 내가 상품서비스를 만든다고 했을때 1,2,3 과 같은 로직이 필요할것이다. 정보를 조회하기 위해서 JPA에 의존을 하고  결제를 하기 위해서 PG 결제에 의존을 하고 주문완료후 이메일 발송을 위해서 이메일 발송 서비스에 의존을 할것이다.

 

과연 이와 같은 구조가 옳바른 구조일까??

만약 JPA가 아닌 QueryDSL로 조회 로직을 바꾼다면 orderService까지 코드를 수정해야하는 경우가 생긴다.

 

그럼 어떤 식으로 설계를 해야 orderService는 안바꾸고 low레벨만 수정을 해도 로직에는 문제가 없을까??

 

그 답은 "인터페이스"에 있다.

 

 

위 그림과 같이 orderService가  조회로직 인터페이스를 바라보는 거는 상관이 없다 왜냐하면 같은 도메인 레이어 이기때문이다.

 

인터페이스를 두면서 의존성을 역전을 시키므로 도메인의 orderService영역에서 조회 로직은 JPA, QueryDSL 이 바뀌어도 상관이 없다. 

알람 기능 같은 경우에도 이메일 서비스 뿐만 아니라 카카오톡 알림 서비스를 추가가 가능하고 확장에는 열려있는 코드로 바뀌게 된다.

 

DDD설계의 기본적인 구조이다.