2012-04-26 2 views
5

나는 사용자가 트위터와 비슷한 방식으로 서로를 따라갈 수있는 응용 프로그램을 만들고 있습니다.DDD : 연결 개체는 Entity Object 또는 Value Object입니까?

DDD를 읽은 후 사용자가 Entity Objects임을 이해합니다. 고유 ID를 사용하여 사용자를 참조합니다.

한 사용자가 다른 사용자를 '따라 다니는'경우 (즉, Connection을 형성 할 때) 관계는 다 대다 테이블에 저장됩니다. 필드에는 FollowerID, TargetIDStatus이 포함됩니다. 각 Follower/Target 조합에 대해 두 개의 레코드 만있을 수 있습니다 (하나는 Active, 다른 하나는 Inactive). 따라서 속성에 따라 오브젝트를 안전하게 식별 할 수 있습니다.

그래서 내 Connection 개체는 Entity Objects가 아닌 Value Object이지만 생각하지 않습니다. 이 결정으로 저를 도울 수 있습니까?

답변

4

엔티티가 고유하고 본인 확인이라는 개념 (고유 한 사용자가 한 명만 존재할 수 있음)이 정확합니다. Connection은 다른 User 엔티티에 종속됩니다. 그것은 두 사용자 사이의 일부 측면을 나타냅니다. 그 측면은 활성 또는 비활성 연결 여부입니다. 사용자가 연결하는 데이터를 포함하지 않으면 연결에 신원이 없습니다. 심지어 데이터베이스에 자체 기본 키가있을 수도 있지만 도메인 관점에서 보면 자신의 고유 ID가 없습니다.

따라서 Connection값이입니다.


내 결론을 지원하기 위해, Microsoft.Net Architecting Applications for the Enterprise, 187 페이지는 말한다 :

값 객체 클래스는 대부분 데이터를 포함하고 포함 된 데이터에 살고 도메인의 엔티티를 나타냅니다. 값 개체는 포함 된 값의 조합으로 완전히 식별되는 입니다. 반면 엔티티 오브젝트에는 포함 된 데이터에 관계없이 자체 생명과 풍부한 행위 이 있습니다. 개체 개체는 대개 수명이 긴 개체 인 입니다. 값 객체는 엔티티의 한 측면을 나타내며 엔티티와 관련하여 만 살 수 있습니다.

또한 189 페이지

:

하나 더 의견은 엔티티와 값 객체 사이의 차이를 설명하기 위해 필요합니다. 값 객체에 대해 저장소 또는 데이터 매퍼가 필요하지 않습니다. 엔티티에만 저장소가 필요합니다. 주어진 엔터티의 저장소 (또는 매퍼)는 주어진 엔터티에 의존하는 모든 값 개체에 대해 을 처리합니다.

+0

"연결하는 데이터가 없으면 연결에는 신원이 없습니다"- 연결은 FollowerID와 TargetID의 조합에 대해 고유합니다. 따라서 TaregtID와 FollowerID가 userid라고 생각하면 연결을 식별 할 수 있습니다. 그러면 엔티티 객체가 아닌 것일까 요? –

+0

@HariSubramaniam, 또 다른 방법은 [this site] (http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/)입니다. , "가치 개체는 엔티티가 없으면 자체적으로 살 수 없습니다." 확실히 어떤 것이 있는지를 결정하는 것이 항상 쉬운 것은 아니지만, 이것에 대해 생각하고 연구 한 후에 나는 가치 대상이라는 것에 크게 기대고 있습니다. – Matt

2

얼마 전, 복제를 발명 한 과학자에 관한 만화를 보았습니다. 그가 복제 할 때마다, 그는 이전 버전을 파괴했다. 그런 다음 데모를 보던 사람이 파손을 결정하고 파괴 부분을 파괴함으로써 두 명의 과학자가있었습니다. 만화는 흥미로운 실존 적 질문으로 끝 맺었습니다.

값과 엔티티는 하나 또는 다른 형식의 ID 필드가 있거나없는 것에 관한 것이 아닙니다. 요점은 - 우리가 도메인 관점을 통해 그 대상들을 어떻게 바라 보는지입니다.가치 객체 인 경우 첫 번째, 세 번째 및 53 번째 과학자는 동일합니다. 정체성에 관심이 있다면, 제 3의 과학자 복제가 결코 제 1의 것과 같지 않을 것이라고 생각한다면, 우리의 사물은 실체입니다.