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.