2011-09-08 2 views
2

나는 과거에 개발했거나 앞으로 할 계획 인 다양한 응용 프로그램에 DDD를 적용하려고하는 분석 마비의 소용돌이에 빠져 있습니다.골재근 결정에 대한 도움

간단한 소프트볼 리그를 예로 들어 보겠습니다. 우리는 리그를 가지고 있는데 은 리그에 속하고 (단 하나) 팀은 하나의 팀에 속합니다. 나는 이 규칙이 다를 수 있지만 단지 척 수 있습니다 알아요.

나는 이것이 당신이 모든 팀 (선수뿐만 아니라) 여기에 속하는 삭제하려면 리그를 삭제하면 팀이 리그없이 존재 할 수있다 참조, 그래서 루트 존재로 일 집계 여기있는 방법 리그. 이제 팀도 중요한 개념이므로 팀이 자체 총계 루트가 될 수도 있습니다. evans 은 집계 루트를 삭제할 때 모든 내부 요소도 삭제하므로 이므로 부모 리그가없는 팀을 떠날 것이라고 말합니다.

누군가가 빛을 비출 수 있다면 나는 매우 감사 할 것입니다.

덕분에

답변

1

당신은 question 적어도 threetimes 매우 유사 요청했습니다. 스포츠 팀, 리그 및 플레이어와 같은 도메인은 항상 동일하지만 제공하는 세부 정보는 항상 다르므로 다른 답변을 얻고 받아들입니다. 당신은 분석 마비 상태에 있습니다. 처음으로 완벽한 모델을 만들 가능성은 거의 없습니다. 코드 작성 및 테스트를 시작하면 즉각적인 피드백을 얻을 수 있습니다. 코드 냄새, 리팩터링을 찾아보다 나은 모델이 등장 할 것입니다.

이 버전의 질문에 관해서. definition 골재 :

데이터 변경 목적의 단위로 취급된다 연관된 오브젝트의 클러스터. 외부 참조는 하나의 집계 회원으로 제한되며 루트로 지정됩니다. 일관성 집합 규칙 집합이 집계 경계 내에 적용됩니다.

그리고 고전적인 예는 주문 집계의 일부인 Entity as Aggregate root 및 Order Lines입니다. 주문 행은 주문 외부에서 이해가되지 않습니다.

"팀이 리그없이 존재할 수 없다"는 규칙이 다릅니다. 리그 집계의 일부가되도록 팀을 선언하는 것만으로는 충분하지 않습니다. "주문이 고객 없이는 존재할 수 없습니다"와 유사합니다. 고객이 주문 집합의 일부임을 의미하지는 않습니다. 고객은 자체 총계이므로 자체적으로 의미가 있습니다. 팀이 자체적으로 의미있는 것처럼, 자체 역사, 팬 등이 있습니다.

이 문제는 '데이터 교환'관점에서도 접근 할 수 있습니다. Evan의 예에서 전체 주문은 내부 invariants가 시행 될 수 있도록 잠겨 있습니다. 리그를 변경하면 모든 팀과 플레이어도 잠길 수 있습니까?

이번에 제공 한 정보에 따르면 리그와 팀이라는 두 개의 집계가 필요합니다. 집계는 서로 참조 할 수 있음을 명심하십시오.

+0

감사의 말씀 감사의 말씀을 전하고 코딩과 테스트를 시작하겠습니다! 더 많이 읽으면 혼란스러워집니다. 예를 들어, 지금은 클래스의 접근 방식을 읽었습니다 접근법은 가치 객체 여야합니다!그게 내 마음을 날려 버렸어. – Marco