2011-01-12 5 views
3

나는 우리가이 시나리오가 파트너와 함께 나는 토론이 있습니다DDD - 도메인 모델 문제

**Publishers root entity 
Advertiser root entity** 

그 실체의 각 일반적인 정보를 공유 : 이메일, BillingAddress, NormalAddress, 성별, 사회 보장 번호 (SSN) 등

내가 결정했습니다 : 값 개체가있는 개인 엔터티 주소 및 나머지 속성. 이 방법은 Person (전자 메일, 섹스, dateofbird)에 대한 특정 정보에 액세스하려는 경우 게시자 또는 광고주 루트 엔터티를 통해 이동해야합니다 (집계 루트로 Person을 처리).

Sample: **Person.BillingAddress.Address1 : 
     Person.BillingAddress.Address2 : 
     Person.BillingAddress.POBOX : 
     Person.Email : 
     Person.Sex** 

내 동료는 추상 클래스, 광고주를 사용하여 수행 할 것을 제안하고 출판사는 모든 일반적인 특성을 가지고하기 위해 사람 추상 클래스에서 상속합니다.

가장 좋은 방법은 무엇입니까?. 갖고 계신 분은 우리를 안내하십시오.

감사합니다, 페드로 드 라 크루즈

+1

당신이 갖고있는 (많은) 질문을 자유롭게 투표하거나 수락하십시오. – cherouvim

답변

2

나는 당신이 옳다고 생각합니다. 상속은 행동이 일반적 일 때만 의미가 있습니다. 어떤 것은 일종의 다른 것입니다. Person은 속성이 유사하기 때문에 다른 종류의 일이 아닙니다. 그것은 코드를 재사용하지 않습니다.

1

당신은 favour composition over inheritance을해야한다.

귀하의 언어가 다중 상속을 지원하지 않는 한, 어떤 점에서이 계층 구조에 다른 것을 도입해야한다면 (예 : 루트 엔티티 AuditableEntity를 작성해야합니다. 나쁜).

1

이 경우에는 상속에 신경 쓰지 않습니다. 부적절하다고 생각합니다.

구성 및 역할에 기반한 접근 방식을 선호합니다. 관리자 역할은 Person 객체를 래핑하고 역할과 관련된 모든 특수 속성 및 동작을 가질 수 있습니다.

1

광고주와 게시자는 회사로부터 상속해야한다고 생각합니다. 회사에는 연락처 (또는 귀하의 경우에는 개인)가 있어야합니다.

기술적으로 회사는 지점 모음을 가질 수 있습니다.

그런 다음 각 지점은 주소를 가질 수 있으며 각 연락처 (사람)는 주소를 가질 수 있습니다.

0

(경고 - 지나치게 단순한)이 경우

상속이 (가) 시험 "는이다"실패 .. 일반적으로

당신이 물어 보곤 내 클래스 "A"<whatever> "입니다"또는 그것을 않습니다 "가" a <whatever>

1

@ Scott 사람에게서 물려받는 문제는 무엇입니까?

@Tim 여기에서 상속이 어떻게 실패합니까?

Person을 추상 클래스로, Advertiser와 Publisher를 구체적인 클래스로합시다.이 방법으로 광고주는 게시자와 동일한 공통 속성을 갖게되므로 이제는 사용자를 전달할 수 있습니다.

광고주가 사람입니다. 게시자가 사람입니다. 나는

+0

회사에도 주소가 있지만 사람이 아닙니다. OP가 회사의 특별한 경우로서 주소 정의를 복제해야합니까? 아니면 회사가이 시설을 포함하기 위해 사람을 연장할까요? – cherouvim

+0

@cherouvim 회사에 대한 개념이 없으므로 그는 Person, Advertiser, Publisher에 대해 세 가지 자격을 요청했습니다. – kamal

+0

@kamal : 프로젝트는 현실 세계에서 진화합니다. 그리고 그것은 DDD의 전체 개념입니다. – cherouvim

1

내 2 센트 ...

나는 당신의 질문을 읽고있다 바와 같이, 물리적 인 사람이 모델의 일부가 아닌 것 같다 상속을 선호합니다. 귀하의 모델은 게시자 및 광고주를 다루고 있습니다.

처음. 저는 실제 사람 (또는 회사)이 "계층 또는 파트너 저장소"로 변형 될 수있는 분리 된 "계층 참조"도메인에 있어야한다고 생각합니다.

초. 모델에 게시자 및 광고주가 필요하기 때문에 이러한 엔티티를 정의하고 작성하려면 DAL (및 저장소이지만 더 작은 방식으로)의 책임이 있어야한다고 생각합니다. DAL은 물리적 인 항목 (모델의 엔터티가 아니므로 "항목"이라고 함)을 가져야하는 유일한 곳이므로 모델에서 분리해야합니다. 실제인은 게시자 및 파트너 조직의 건설 계획에 암시되어 있으므로 데이터 측에 있어야합니다. 해당 엔티티의 정제 및 수분 공급은 저장소에 있어야합니다.

모델에 "Person"클래스가 없어야한다고 생각합니다. 모델에서 보이지 않는 저장소 아래에 "Person"클래스가 있어야한다고 생각합니다.