DDD - объекты значения против Объекты Entity - PullRequest
7 голосов
/ 29 января 2009

Я новичок в DDD и очень стараюсь понять некоторые концепции. Как вы определяете в своем домене, какие объекты являются объектами Entity, а какие объектами Value, и как именно они обрабатываются по-разному?

Ответы [ 2 ]

1 голос
/ 29 января 2009

Как я вижу, доменные объекты в основном представляют существительные вашего бизнес-домена, а делают идентичными, тогда как ценностные объекты не несут никакого особого значения для бизнеса (например, MonetaryAmount) и не имеют идентичности .

0 голосов
/ 28 марта 2014

Из Блог Джейка Чарльтона :

Сущности «это моя сущность, многим она нравится, но эта шахта»

Ключевой определяющей характеристикой сущности является то, что она имеет Идентичность - она ​​уникальна внутри системы, и никакой другой сущности нет независимо от того, насколько похожа одна и та же сущность, если она не имеет одинаковую идентичность.

Идентичность может быть представлена ​​разными способами на сущности - это может быть числовой идентификатор (классический CustomerID), это может быть Guid ( классический… о, неважно), или это может быть естественный ключ (например, CustomerNumber ваш клиент был передан вашей системой CRM, когда они сначала купил у вас).

Какой бы способ вы не представляли, сущность определяется имея личность.

Объекты-значения. Ключевым определяющим признаком объекта-значения является что у него нет идентичности. Хорошо, возможно, немного упрощенно, но Намерение объекта Value состоит в том, чтобы представлять что-либо только атрибуты. Два ВО могут иметь одинаковые атрибуты, и в этом случае они одинаковые. Однако они не имеют никакой ценности, кроме как в силу их атрибутов.

Другим общим аспектом для ВО является то, что они, вероятно, должны быть неизменные, однажды созданные они не могут быть изменены или изменены. Вы можете создать новый, и, поскольку они не имеют идентичности, это то же самое как изменение другого.

Думайте в классе автомобилей в POO в приложении системы автомобильного завода (без таблички). Каждый автомобиль уникален, даже если эти 2 автомобиля равны (одна и та же модель, двигатель, цвет, вес и т. Д.) И могут различаться по идентификатору Идентификационный номер автомобиля .

Два автомобиля могут быть равны, потому что его атрибуты Car1.equals(Car2), но не тот же автомобиль, потому что его VIN Car1 != Car2. Если автомобиль меняет свой цвет, это не другой автомобиль, это тот же автомобиль с другими атрибутами. Это сущность.

Теперь подумайте о Color Class (для автомобиля) с полями name и RGB. Голубой цвет имеет 'Cyan' в названии и R = 0 G = 255 B = 255. Никакое другое поле идентичности не требуется, потому что его атрибуты являются его идентичностью. Цвет является VO и должен быть неизменным, потому что изменение имени или RBG (или оба) представляют другой цвет ... или ошибка в этом случае, если имя и RGB не совпадают;)

Color1.equals(Color) и Color1 == Color2 должны всегда иметь одинаковый результат.

...