Какова этимология / значение термина «объект стоимости»? - PullRequest
3 голосов
/ 13 октября 2010

Я программист с фоном .NET / PHP .

Недавно я просмотрел видео-тренинг по Flashbuilder 4 / ActionScript .Одно из видео в обучающем видео называется « Создание модели данных с объектом значения ».Я упомянул, что « объект значения » был для меня незнакомым термином, и я не знал, имел ли он в виду « модель » или нет, и это было немного странно, так как я могупонимать его только как «модель», но заголовок предполагает, что мы создаем модель с ценностным объектом, предполагая, что это две разные сущности.

Тренер сказал, что ему сказали, что это был довольно распространенный термин в Java , также иногда называемый " объект переноса ".На самом деле, страница Википедии для «объекта значения» перенаправляет на « Объект передачи данных », а вопросы о стеке потока, такие как , этот упоминают, что «объект значения» также может быть1025 * сопоставленный объект в Java".

Какова этимология этого термина и как он относится к другим терминам, связанным с моделью данных?Он пришел из мира Java и в какой-то момент вышел из-под широкого распространения?

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Я был на Jazoon 2010, где Кевлин Хенни выступил с докладом на тему «Значение объектов» - я настоятельно рекомендую смотреть или читать презентацию (которая охватывает объекты-ценности).Для меня слишком много контента, чтобы его можно было легко распознать, но моя интерпретация будет такой:

Объект значения

Объект, представляющий информацию в модели.Он не имеет идентичности и является неизменным.Например, дата 13 октября 2010 года может быть представлена ​​как объект значения.У него нет идентичности, и 13 октября 2010 года - это всегда 13 октября 2010 года - оно никогда не меняется.

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

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

2 голосов
/ 13 октября 2010

Термин, кажется, перегружен в разных контекстах. Миско Hevery описывает термин, как я его понимаю:

Класс Injectable может запрашивать другие Injectables в своем конструкторе. (Иногда я называю Injectables как Service Objects , но этот термин перегружен.) [...] Вот несколько примеров классов, которые я ожидаю получить из моей структуры DI: CreditCardProcessor, MusicPlayer, MailSender, OfflineQueue.

Аналогично, Newables может запрашивать другие Newable в своем конструкторе, но не для Injectables (Иногда я называю Newables как Value Object , но, опять же, термин перегружен). Некоторые примеры Newables: Электронная почта, MailMessage, Пользователь, CreditCard, Song . Если вы сохраните эти различия, ваш код будет легко тестировать и работать с ним. Если вы нарушите это правило, ваш код будет трудно проверить.

Другое описание, с которым я бы согласился, это http://c2.com/cgi/wiki?ValueObject

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

Таким образом, у меня может быть несколько копий объекта, представляющего дату 16 января 1998 года. Любая из этих копий будет равна друг другу. Для небольших объектов, таких как этот, часто проще создавать новые и перемещать их, чем полагаться на один объект для представления даты.

Объект-значение всегда должен переопределять .equals () в Java (или = в Smalltalk). (Не забудьте также переопределить .hashCode ().)

...