2013-03-05 2 views
0

В доменном дизайне есть сводный корень, который имеет ссылку на внутренние объекты.Управление доменом Дизайн и локальная идентификация в совокупности

Агрегатный корень - это объект с глобальной идентификацией (каждый может использовать свой идентификатор). Агрегированный корень имеет ссылки на локальные объекты (объекты).

Предполагая здесь, что Сущности являются Hibernate @Entities (скажем)

Допустим, у нас есть совокупный Root «Пользователь», который имеет «Адрес» сущность в нем в качестве объекта (который на самом деле является юридическое лицо, а)

Вопрос: Как можно сделать локальные объекты только локальными. Я имею в виду, что нет никаких барьеров, которые могли бы помешать кому-либо использовать локальные объекты (например, адрес) по своим идентификаторам. (так что это тождество не является локальным вообще, а глобальным). Тогда, каков способ сделать его локальным?

ответ

3

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

2

Предполагается, что сущности внутри совокупного корня имеют только локальный идентификатор. Для всех целей и целей таблица базы данных не должна иметь первичный ключ. Когда агрегат гидратируется, объекты внутри AR должны выбираться на основе их ссылки на AR. Но даже , что FK не обязательно должно быть представлено в локальном объекте, поскольку соединение очевидно на основе локализации локальных объектов с AR.

Поскольку большинство систем баз данных будут стонать, если на столе нет ПК, поэтому вы можете добавить его для этого, но вы можете просто игнорировать его в своем сущности. Таким образом, для ПК в собственности не было бы собственности. Единственный способ, которым кто-то мог тогда добраться до этого объекта, - это использовать БД, так как в вашем коде не должно быть никакого способа сделать это.

3

Ну, я не думаю, что это вопрос открытого поля или свойства или механизма ограничения доступа, так как я вижу, что это «локальная идентификация» означает, что объекты за пределами общей границы не могут использовать это локальное имя значимым или полезным способом (например, они не могут использовать эту идентификацию для извлечения этого объекта или сохранения его в базе данных или любой другой операции). Эта идентичность ничего не значит для внешнего мира, и она уникальна только в этом совокупности. Другой пример: то, что гарантирует, что объекты, находящиеся вне границ совокупности, не будут содержать ссылки на объекты внутри (которые нарушают один из принципов агрегатов), ну ничего, если только эти объекты не являются объектами VALUE, которые могут быть не так каждый раз. Если я хочу сказать это в нескольких словах: не создавайте общедоступных API-интерфейсов, которые используют идентификаторы объектов в совокупности, таким образом вы разъясните разработчику, что они не будут использовать эти идентификаторы.

Смежные вопросы