DDD: Могут ли неизменные объекты быть сущностями?


9

Я читал бесчисленные посты о различиях между сущностями и объектами-значениями, и хотя я думаю, что, по крайней мере, концептуально я понимаю, как они различаются, похоже, что в некоторых из этих постов авторы считают, что концепция конкретного домена является ВО, просто потому, что является неизменным (таким образом, его состояние никогда не изменится, по крайней мере, в рамках этой конкретной модели предметной области).

Согласны ли вы с тем, что если состояние объекта никогда не изменится в конкретной модели предметной области, то этот объект никогда не должен быть сущностью? Почему?


Я должен выучить немного DDD, чтобы я мог разумно ответить на некоторые из этих вопросов. Я подозреваю, что сложность, с которой сталкиваются многие разработчики программного обеспечения с такими простыми понятиями, связана с ошибочным представлением о том, что DDD - это методология программирования.
Роберт Харви

Ответы:


4

Если верить книге (Evans, 2004), «объект, определяемый прежде всего своей идентичностью, называется сущностью». Это определение не зависит от того, является ли объект изменчивым или неизменным. Я думаю, что гораздо менее вероятно, что неизменяемый объект будет сущностью в данном домене, так что это полезная эвристика для определения, является ли объект «объектом значения» или «сущностью», но это не является частью определения.

Например, допустим, у вас есть субъект, представляющий сотрудника, который может иметь или не иметь прямого руководителя. Если вы решите представить идею отсутствия прямого супервизора в качестве ссылки на «нулевой» объект супервизора, то «нулевой» объект супервизора разумно считается сущностью. И вы, вероятно, могли бы сделать этот «нулевой» объект неизменным.


1
+1 Менеджер может быть доступен только для чтения (неизменяемый) в определенном контексте или поддомене, но это не значит, что он не имеет идентичности.
Адриан Шнайдер

Прости меня за глупость, но я не совсем понимаю твой пример руководителя. Вы говорите, что в области у нас будет две концепции, связанные с супервизором? Одна концепция будет представлять супервизоров, у которых есть сотрудники, которых они контролируют (в коде эта концепция будет реализована как изменяемый класс Supervisor), в то время как другая концепция будет описывать супервизора, который не контролирует каких-либо сотрудников (и эта концепция будет реализована как нулевая в коде) ?
bckpwrld

@bckpwrld Нет, он наверняка означает Нулевой Объект .
Маартин

2

Я прочитал это так, что объект-значение - это объект, который не имеет идентичности сам по себе и не имеет никакого отношения к изменению его состояния или его изменению. Это делает различие между сущностью и объектом значения тем, что сущность имеет первичный ключ, тогда как объект значения не имеет; у него будет внешний ключ к сущности, которой он принадлежит.

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

Я все еще могу изменить свойства объекта значения, но его не нужно идентифицировать независимо от его сущности.


Я смешал терминологию из реляционных баз данных (первичный ключ) как тождество как метафору, пожалуйста, не воспринимайте это буквально
Кевин

По моему мнению, по крайней мере, даже если в коде VO представлены изменяемым типом (таким образом, экземпляры этого типа могут иметь измененные свойства), концептуально эти VO по-прежнему неизменны. Таким образом, изменение свойства экземпляра, представляющего конкретный VO, означает, что теперь этот же экземпляр представляет другой VO. Другими словами, ВО концептуально всегда неизменны
bckpwrld
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.