Skip to content

Latest commit

 

History

History
38 lines (17 loc) · 1.96 KB

01. 여러 애그리거트가 필요한 기능.md

File metadata and controls

38 lines (17 loc) · 1.96 KB

정리

한 애그리거트로 구현할 수 없는 도메인 개념은 어떻게 해야 할까?

결제 금액 계산 로직은 한 애그리거트로 기능을 구현할 수 없다.

실제 결제 금액을 계산할 때 다음과 같은 내용이 필요하다.

  • 상품 애그리거트 - 구매하는 상품의 가격이 필요하다. 또한 상품에 따라 배송비가 추가되기도 한다.
  • 주문 애그리거트 - 상품별로 구매 개수가 필요하다.
  • 할인 쿠폰 애그리거트 - 쿠폰별로 지정한 할인 금액이나 비율에 따라 주문 총금액을 할인한다. 할인 쿠폰을 조건에 따라 중복 사용할 수 있다거나 지정한 카테고리의 상품에만 적용할 수 있다는 제약 조건이 있다면 할인 계산이 복잡해진다.
  • 회원 애그리거트 - 회원 등급에 따라 추가 할인이 가능하다.

이렇게 한 애그리거트에 넣기 애매한 도메인 기능을 특정 애그리거트에 구현하면 안 된다.

애그리거트는 자신의 책임 범위를 넘어서는 기능을 구현하기 때문에 외부에 대한 의존이 높아지게 되고 수정을 어렵게 만든다.

뿐만 아니라 애그리거트의 범위를 넘어서는 도메인 개념이 애그리거트에 숨어들어 명시적으로 들어나지 않는다.

이런 문제를 도메인 서비스를 이용해 해결한다.

느낀점

결제 금액 계산 로직과 같이 애그리거트의 범위를 넘어서는 도메인 개념은 한 애그리거트에 넣기 애매하다.

이를 어느 애그리거트에 넣어야 하는가에 대한 고민도 필요하고 확장시 확장되는 내용을 해당 애그리거트에 추가하는게 맞는지 고민도 필요하다.

만약 해당 애그리거트와 연관이 없는데 해당 도메인 개념이 애그리거트에 속해 있어 억지로 넣는 경우가 생긴다.

이를 해결하기 위해 여러 애그리거트의 기능을 사용할 수 있는 것이 필요하다.