Как определить сущности, объекты ValueObject и агрегаты для конкретного проекта в шаблоне DDD? - PullRequest
0 голосов
/ 06 февраля 2019

Я разрабатываю онлайн-портал вакансий, используя шаблоны DDD.Я обнаружил множество «объектов», таких как «Пользователи», «Работа», «Роли», «Экспертиза», «ExperienceRange», «Страна», «Штат», «Город», «Адрес», «Подписки» и т. Д.

Мой вопрос Как мне выяснить?какая из них является сущностью, ценным объектом или совокупностью? Пожалуйста, сообщите мне, сталкивались ли вы когда-либо с такой же дилеммой.

Я принял следующее решение:

Сущности -Пользователь, Работа, SubscriptionPackage ValueObjects - Роль, Экспертиза, ExperienceRange, Город, Государство, Страна

Я знаю, что мы не должны думать о постоянстве при выполнении DDD-моделирования, но возникло сомнение, что какой-либо объект значения iхранение в базе данных должно иметь идентификатор или нет?

если они имеют идентификатор, не нарушают ли они фундаментальный принцип ValueObjects и если мы не сохраняем их с идентификаторами, то как ссылатьсяих в полях внешнего ключа?

Пожалуйста, помогите мне ответить на эти вопросы.

Если вы можете предложить, какие из вышеупомянутых объектов являются объектами, которые являются объектами-значениями, а какие являются совокупными, то это было бы замечательно.

Заранее спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Когда вы думаете о DDD, оставьте отображение БД на более позднем этапе.Я знаю, что повторяю то, что вы сказали, но только потому, что это правда.У объекта значения может быть идентификатор БД по другим причинам (нормализация, отчетность и т. Д.).

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

Итак, еще раз, забудьте о БД - подумайте об объектах.По какой причине у объекта есть идентификатор?Я бы сказал, что потом его можно будет извлечь и изменить, сохранив тот же идентификатор.И если это VO, потому что идентичность неявно в значениях объекта.Имеет ли смысл для пользователя иметь идентификатор?А как насчет адреса?Или Город? ... Это зависит.

Чтобы привести пример объекта значения города, если вам нужно сопоставить его как FK с таблицей 'городов', то ваш объект City, вероятно, будет иметь идентификатор,но идентификатор не раскрывается.Это деталь реализации.Пока идентификатор пользователя будет выставлен.Например, город может быть связан с провинцией / штатом, а город - со страной.

Но в другом приложении, где пользователи могут добавлять города и информацию о них, город может быть сущностью или даже совокупностью.Это действительно зависит от ваших требований.

Сказав это, список сущностей и VO, которые вы предоставили, в целом выглядит нормально, но я не знаю ваших требований.

Чтобы ответить наПервый вопрос: вы можете прочитать Сущности, объекты-значения, агрегаты и корни , поскольку существуют некоторые правила относительно того, что такое VO, сущность или агрегат.Сложность возникает из-за того, как их применять, и опыт является решением этой проблемы.

Как итог:

Сущности

Многие объекты фундаментально не определяются своими атрибутами,а скорее потоком непрерывности и идентичности.

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

Многие объекты не имеют концептуальной идентичности.Эти объекты описывают характеристики вещи.

Агрегаты

Агрегаты проводят границу вокруг одной или нескольких сущностей.Агрегат применяет инварианты для всех своих сущностей для любой поддерживаемой им операции.

...