문제

Foo와 Bar의 2 개 엔티티가 있다고 가정 해 봅시다. Foo는 집계 뿌리이며 막대가 포함되어 있습니다. 내가 이해하는 한 다음과 같이 보일 것입니다.

public class Foo{
    private readonly Bar Bar;
}

사용자가 정의 된 목록에서 FOOS 용 막대를 선택할 수있는 기능을 제공하고 싶습니다 (변경).

리포지토리가 집계 루트를위한 것이기 때문에 바 엔티티에 대한 리포지토리가 없음을 의미합니다.

이로 인해 문제가 발생합니다. FOO에 대한 참조 없이는 막대를 독립적으로 작성/업데이트 할 수 없습니다.

그것은 Bar가 Foo 없이는 의미가 없어도 저장소가 있어야한다는 것을 의미합니까?

도움이 되었습니까?

해결책

FOO와 관련이없는 막대 목록에서 선택하려면 집계 루트가 아닙니다. 예를 들어, 주문 없이는 순서 목록을 얻을 수 없으므로 단일 집계 루트 (Order)이지만 OrderItems에 할당 할 제품 목록을 가져올 수 있으므로 제품이 주문 집계 루트의 일부가 아닙니다.

OrderItem은 순서 집계 루트의 일부이지만 여전히 독립적으로 작성하고 업데이트 할 수 있습니다. 그러나 주문을 언급하지 않고는 얻을 수 없습니다. 바에 대해서도 FOO의 일부인 경우에도 각각 (foo.bars)을 가져 와서 작업하거나 foo.addbar (new bar ())를 할 수 있습니다. 그러나 foo없이 목록을 가져와야하는 경우 바는 Foo 집계의 일부가 아닙니다. 별도의 엔티티입니다.

글쎄, 그게 내가 여기서 DDD를 보는 방법이지만 물론 에릭 에반스는 아닙니다.

다른 팁

집합 뿌리를 갖는 이유는 다음과 같습니다.

  1. 그들은 복합 엔티티에 대한 통제 및 지시 된 액세스를 제공합니다
  2. 전체 집계가 유효하도록 규칙을 시행 할 수 있습니다.

내 테이크 :선택 해야하는 경우 Bar a.없이 개체 Foo, a BarRepository.

하지만...업데이트하면 a Bar, 그리고 그것은 부모에 대한 검증 규칙을 중단합니다. Foo? 이런 일이 발생할 수 있다면 액세스해야합니다 Bar 부모를 통해 Foo.

그러나, 당신은 Bar 물체 (예 : 배치 작업 또는 보고서), 그리고 당신 알다 저것 Foos 깨지지 않을 것입니다. 계속해서 액세스하십시오. BarRepository.

집계 뿌리는 다른 집계 뿌리로 구성 될 수 있습니다. 당신은 그것을 발견 할 수 있습니다 Bar 집계 뿌리 자체이며, BarRepository :)

Bar가 엔티티가되어야한다고 확신합니까? 당신은 그것을 추적하고 도메인에서 변경해야합니까? 값 객체로 볼 수 있다면 서비스에서 가져온 다음 선택한 값 객체를 FOO 엔티티에 "연결"하는 것이 좋습니다. 드롭 다운 목록을 통해 순간.

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