2

도메인에 3 가지 수준의 테이블 계층 구조로 저장되는 집계가 있다고 가정합니다. 도메인 객체를 Order - OrderItems - ItemAttributes으로 지정합니다. 데이터 영역에서 저장소 패턴을 사용한다고 가정 해 봅시다.무거운 집계 목록 얻기

리포지토리에는 Orders의 목록을 반환하는 GetAll 메서드가 있습니다.

우리는 그러므로, 우리는 목록을 얻을 수

  • GET /orders를 사용하여, 우리의 서비스 계층에서 REST에 따라
  • GET /orders/{Id} 콘크리트 Order

목록은의 기본 필드가 포함 얻을 수 그러나 각각 Order이 없지만 id로 쿼리하면 더 큰 개체가 반환됩니다.

하나의 Order의 구체화는 값 비싼 작업이므로 두 개의 필드를 클라이언트에 보내려면 전체 집계를 얻는 것을 좋아하지 않습니다. 반면에 저장소는 완전히 초기화 된 집계 만 반환해야한다는 합리적인 규칙을 따르려고합니다.

어떻게 이러한 어려움을 해결할 수 있습니까?

+1

한 단어 : CQRS http://www.sapiensworks.com/blog/post/2013/05/04/CQRS-Explained.aspx – MikeSW

답변

2

다른 사람들이 제안한 CQRS 외에도 간단한 Lazy loading이이 문제에 대한 좋은 해결책이 될까요? 주문 항목에 액세스하지 않으면로드되지 않습니다. 또는 지연로드를 사용할 수없는 경우 전용 OrderSummary/OrderStatus 도메인 오브젝트?

또한 무거운 골재가 실제로 필요한지 다시 생각해 볼 가치가 있습니다. 단순히 도메인 규칙이 필요하지 않을 수 있습니다. 예를 들어 수명주기는 무거운 집계 (예 : 그룹 -> 사용자 또는 제품 -> BacklogItem)가있는 것으로 알려진 '잘못된 이유'입니다. 이 주제에 대한 읽기를 적극 권장합니다 : Aggregate design.

+0

지연로드 문제는 단순화를 위해 Order-OrderItems를 사용했다는 것입니다. -) 실제로는 집계 내에 이벤트 중심 로직이 많이 있으며 전체 계층을 검사합니다. 링크를 가져 주셔서 감사합니다. 귀하가 제안한 것을 꼭 읽으려고합니다. – starteleport