DDD : 불변 개체도 엔터티가 될 수 있습니까?


9

엔터티와 Value 객체의 차이점에 대한 수많은 게시물을 읽었으며 적어도 개념적으로 두 가지가 어떻게 다른지 이해한다고 생각하지만 이러한 게시물 중 일부에서 저자는 특정 도메인 개념을 단순히 VO라고 생각합니다. 는 불변입니다 (따라서 그 상태는 적어도 특정 도메인 모델 내에서 변경되지 않습니다).

개체의 상태가 특정 도메인 모델 내에서 변경되지 않는 경우이 개체가 개체가되어서는 안된다는 것에 동의하십니까? 왜?


이러한 질문에 지능적으로 대답 할 수 있도록 DDD를 배워야합니다. DDD가 프로그래밍 방법론이라는 잘못된 개념으로 인해 많은 소프트웨어 개발자들이 이와 같은 간단한 개념으로 어려움을 겪고 있다고 생각합니다.
Robert Harvey

답변:


4

이 책 (Evans, 2004)을 보면, "본질적으로 정의 된 대상을 ENTITY"라고합니다. 이 정의는 객체가 변경 가능한지 여부와 무관합니다. 불변 객체가 주어진 도메인의 엔티티 일 가능성 은 훨씬 낮 으므로 객체가 "값 객체"인지 "엔티티"인지를 결정하는 데 유용한 휴리스틱이지만 정의의 일부는 아닙니다.

예를 들어, 직속 상사를 갖거나 갖지 않을 수있는 직원을 대표하는 법인이 있다고 가정 해 봅시다. 직접 수퍼바이저가 "널"수퍼바이저 개체에 대한 참조가되지 않는다는 아이디어를 나타내기로 결정한 경우 "널"수퍼바이저 개체는 엔티티로 간주됩니다. 그리고이 "널 (null)"객체를 변경할 수 없게 만들 수 있습니다.


1
+1 관리자는 특정 컨텍스트 또는 하위 도메인에서 읽기 전용 (불변) 일 수 있지만 ID가없는 것은 아닙니다.
Adrian Schneider

밀도가 높아진 것을 용서하지만 감독자의 모범을 완전히 이해하지는 못합니다. 도메인에서 우리는 두 가지 감독자 관련 개념을 가질 것이라고 말하고 있습니까? 한 개념은 감독하는 직원이있는 감독자를 나타냅니다 (이 개념은 변경 가능한 감독자 클래스로 구현 됨). 다른 개념은 직원을 감독하지 않는 감독자를 설명합니다 (이 개념은 코드에서 null로 구현 됨) ?
bckpwrld

@bckpwrld 아니요, 반드시 Null Object를 의미합니다 .
maaartinus

2

내가 읽은 방법은 가치 객체가 자신과 정체성이 없으며 상태가 변경되거나 변경되지 않는 객체라는 것입니다. 이것은 엔터티와 기본 키가있는 값 개체 간의 차이를 만드는 반면 값 개체는 그렇지 않습니다. 여기에는 속한 엔티티에 대한 외래 키가 있습니다.

http://lostechies.com/joeocampo/2007/04/23/a-discussion-on-domain-driven-design-value-objects/

여전히 값 개체의 속성을 변경할 수 있지만 해당 개체와 독립적으로 식별 될 필요는 없습니다.


나는 관계형 데이터베이스 (1 차 키)의 용어를 은유로서의 정체성으로 혼합했다. 문자 그대로 받아들이지 말아라
Kevin

적어도 이해하기 위해 코드에서 VO가 변경 가능한 유형으로 표시 되더라도 (이 유형의 인스턴스는 속성을 수정할 수 있음) 개념적으로 이러한 VO는 여전히 불변입니다. 따라서 특정 VO를 나타내는 인스턴스의 속성을 변경하면 동일한 인스턴스가 다른 VO를 나타냅니다. 다시 말해,
VO
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.