문제

집계 루트를 설계하는 데 몇 가지 문제가 있습니다. 내 마음 속에 그것을 보는 방법은 다음과 같습니다. :)

Store (the aggregate root)
-> Sales - A store create a sale every day
 -> Zones - A store is divided into zones
    -> Styles - A zone has x number of styles
       --> Colors - A style has x number of colors
    etc..

이제 이것을 바탕으로 저의 집계 루트는 가게입니다. 그러나 지금 내가 그 주위에 저장소를 만들려면 이런 식으로 보입니까?

public class StoreRepository()
{
  Store GetById() {...}
  StoreZone GetZone() {...}
  List<StoreZoneStyle> GetStylesByZone() {...}
  List<Color> GetColorsByStyle() {...}
}

계속하는 좋은 방법입니까? 말할 것도없이 내가 DDD를 처음 접했다.

도움이 되었습니까?

해결책

나는 당신이 집계 경계와 엔티티를 단순한 계층 이상의 것으로보아야한다고 생각합니다. 기회는 그보다 더 풍부한 모델을 가질 것입니다.

집계가 옳은지 알 수있는 첫 번째 방법은 그 안에있는 각 엔티티를보고 "직접 액세스해야합니까?"라고 물을 수 있다는 것입니다. 당신이 예라고 대답한다면, 그 엔티티는 총체의 일부가 아닐 것입니다.

당신의 도메인에 대해 더 많이 알지 못하면 상점이 실제로 집계라고 가정 할 수 있습니다. 반면에 판매는 더 복잡합니다. 예, 판매는 상점에서 발생하지만 독립적으로 판매를 사용할 필요가 있습니까? 매장과의 작업 범위를 벗어난 경우에도 판매가 해당 집계를 벗어날 수 있습니다.

나는 스타일과 색상이 모두 불변적이고 반복 가능하다는 것을 상상하고 있으므로이 경우 가치 객체 일 수 있습니다. 구역은 상점에 고유합니까, 아니면 다양합니까?

개인적으로, 나는 종이 (또는 화이트 보드)의 도메인의 모든 항목을 식별하는 데 가치가 있습니다. 나는 이해 관계자와 함께 발견 단계를 거치고 그냥 나가게 될 것입니다. 그런 다음이 단어를 대화에서 리더로 사용하여 관계의 관계를 이해하려고 노력하십시오. 이해 관계자를 충분히 인터뷰하면, 그가 제공하는 설명은 실제로 원하는 대부분의 것을 정의합니다.

죽은 말을이기는 것은 아니지만 에반스 책은 확실히 얻을 가치가 있습니다. 약간 건조하지만 매우 통찰력이 있습니다. 빠른 점프 스타트를 위해서는 읽을 수 있습니다 무료 책 기본적으로 Evans Book의 요약 인 InfoQ에서.

다른 팁

집계 루트는 트랜잭션, 분포 및 동시성의 일관성 경계입니다 (Gojko Adzic을 통한 Eric Evans).

두 사람이 같은 상점에서 다른 구역을 수정하면 동시 충돌이 발생해야합니까? 그렇지 않다면 아마도 구역은 상점과 분리 된 자체 집계 루트 여야합니다.

"저장소"는 "Zones", "Sales"등에 대한 모든 기능을 "Store"객체 뒤에 숨기고 싶지 않기 때문에 "Store"는 집계 루트가 아닌 것 같습니다. 그렇게하면 "저장"객체가 매우 부풀어 올릴 수 있습니다.

"Store", "Zone"및 "Sale"은 자체 저장소를 가질 수 있습니다.

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