문제

제안된 도메인을 사용하세요. 효과적인 집계 설계 여러 릴리스가 있는 제품의 경우.이 기사에서 Vaughn은 제품과 릴리스가 각각 고유한 집계 루트여야 한다는 결론에 도달했습니다.

이제 기능을 추가한다고 가정해 보겠습니다.

  • 릴리스 관리자로서 나는 할 수 있기를 원한다 릴리스 정렬 ~하도록 하다 사용자에게 더 큰 규모의 에픽을 출시하기 위한 타임라인을 만들 수 있습니다.

저는 특정 요구 사항이 있는 PM은 아니지만 UI에서 릴리스를 정렬하는 기능을 원하는 것이 타당해 보입니다.

이것이 어떻게 작동하는지 정확히 모르겠습니다.각 릴리스에는 주문 속성이 있는 것이 당연하지만 재정렬에는 동일한 트랜잭션에서 여러 집계를 변경하는 작업이 포함됩니다.반면 해당 정보가 Product 집계에 저장되어 있는 경우 다음과 같은 메서드가 있어야 합니다. product.setRelaseOrder(ReleaseId[]) 이는 릴리스와 완전히 다른 장소에 저장하기에는 이상한 데이터처럼 보입니다.더 나쁜 것은 릴리스를 추가하면 두 가지 다른 집계에 대한 수정이 다시 필요하다는 것입니다!또 무엇을 할 수 있나요?ProductReleaseSortOrder는 자체 집계일 수 있지만 이는 완전히 터무니없는 소리입니다!

그래서 뭐 할까?지금은 여전히 ​​let-product-manage-it 옵션 쪽으로 기울고 있는데 여기서 올바른 것은 무엇입니까?

도움이 되었습니까?

해결책

그래서 제품 및 해제는 모두 ARS입니다.릴리스는 AggregentID를 통해 제품에 대한 연관성을 가지고 있습니다.뭔가가 주문한 주어진 제품의 모든 릴리스 목록을 얻고 싶습니까?

주문은 집합체의 속성이므로 제품에 설정해야하지만 릴리스는 ARS이고 제품 ar에서 릴리스 저장소에 액세스하지 않아야합니다 (모든 AR 자체 저장소가 있어야합니다).

단순히 ProductID 및 주문 매개 변수를 취하고 ReleaseRepository.LoadOrderedReleaseFor 제품 (ProductID, Order)을 호출하는 reventorqueryService를 만드는 것입니다.

Contexts를 분리하는 것에 대해서도 생각할 것입니다. 릴리스 프레젠테이션 모델이 다른 컨텍스트에 있어야합니다.예를 들어 쿼리 할 때만 사용되는 추가 AR ProductReleases.

다른 팁

나는 실제로 새로운 집계 루트(예: ProductReleaseSorting 제안된 대로) 각 개별 정렬 및/또는 주문 목적을 위해.이 때문입니다 releaseOrder 분명히 실제로는 Product, 즉 제품 자체에 의미가 있는 것입니다.오히려 실제로는 "뷰"의 속성입니다. 수집 이러한 관점은 자체적으로 모델링되어야 합니다.

내가 항목 컬렉션에 대한 각 개별 보기에 대해 새로운 집계 루트를 도입하는 경향이 있는 이유는 나중에 추가 주문(예: "마케팅 주문")을 도입하거나 여러 제품 관리자를 도입할 경우 어떤 일이 발생하는지 생각해 보면 분명해집니다. 자신의 주문 등을 유지하고 싶습니다.여기서는 "마케팅 주문"과 "출시 주문"이 독립적으로 처리되어야 하는 두 가지 다른 개념이라는 것을 쉽게 알 수 있으며, 여러 사람이 동일한 키로 제품을 주문하지만 다른 주문을 사용하려는 경우 개별 " 1인당 조회수'입니다.또한 정렬할 때 고려하고 싶은 여러 가지 순서 기준이 있을 수 있습니다(후자의 예는 (다른 맥락에서) 가장 빠른 경로와 가장 빠른 경로가 될 수 있습니다.최단 경로), 이는 모두 해당 항목의 개별 속성이 아니라 컬렉션에 대한 보기에 따라 달라집니다.

이제 제품 관리자의 정렬을 처리하는 경우 ProductReleaseSorting 집계, 당신

  1. 주문(AR)에 대한 단일 진실 지원 소스가 있습니다.
  2. 그만큼 ProductReleaseSorting AR은 두 제품의 주문 번호가 동일하지 않도록 제한을 적용할 수 있습니다.
  3. 주문을 변경할 때 단일 거래에서 여러 AR을 업데이트해야 하는 문제에 직면하지 마세요.

당신의 ProductReleaseSorting Aggregate는 도메인에서 고유한 ID("싱글톤")를 가질 가능성이 높습니다. 즉, 모든 제품 관리자가 동일한 정렬을 공유합니다.그러나 모든 팀원이 자신만의 것을 갖고 싶다면 ProductReleaseSorting, 이를 제공하여 이를 지원하는 것은 쉽지 않습니다. ProductReleaseSorting 해당 ID.마찬가지로, 좀 더 일반적인 ProductSorting 팀별 ID로 가져올 수 있습니다(마케팅 vs.제품 관리) 저장소에서.이 모든 것은 주문 목적을 위한 새로운 별도의 집계 루트를 사용하면 쉽지만 기본 항목/엔터티에 속성을 추가하는 경우에는 어렵습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top