Методы репозитория или методы совокупного корня? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть сущность с именем Person. Он представляет человека, который может делиться информацией с другими людьми. Я также определяю две сущности TelephoneNumber и Address, которые представляют некоторую информацию. Каждый человек может предоставить базе данных свой номер телефона и адрес, например TelephoneNumber и Address, и предоставленная информация принадлежит только этому лицу. Затем лицо, которому принадлежит определенный информационный номер телефона и адрес, может связать их друг с другом через субъект Association и может поделиться этой связью с другими лицами.

Я пытаюсь следовать методологии доменного дизайна. Так как номер телефона или адрес принадлежит только одному человеку, идентификационные данные TelephoneNumber и Address являются локальными для этой личности Person. Итак, я думаю, что есть совокупность, которая включает в себя сущности Person, TelephoneNumber, Address и Association. Корнем совокупности будет сущность Person. Итак, очевидно, что мне нужен репозиторий для сущности Person, так как это совокупный корень, и я могу "восстановить" элемент person из хранилища данных, используя этот репозиторий.

Теперь определенный человек хочет добавить номер телефона и адрес и хочет связать их. Итак, предполагая, что человек уже существует в хранилище данных, я получаю Person с помощью репозитория. Как мне тогда добавить информацию?

Я вижу два подхода. Использование addTelephoneNumber и addAddress методов в сущности Person или использование репозиториев для TelephoneNumber, Address и Association.

Предполагая, что первый подход является правильным, что эти методы должны делать? Как эти методы могут добавить информацию в хранилище данных? Я уточнил, что выбрал направление прохождения для связей между Person и TelephoneNumber / Address, от TelephoneNumber / Address до Person. Таким образом, каждый раз, когда я получаю Персона, я не получаю все его телефоны и адреса. В этом случае, когда человек хочет добавить телефон, используя метод addTelephoneNumber, что этот метод делает? Куда ставится новый телефон?

PS : номера телефонов и адреса, принадлежащие этому лицу, не обязательно совпадают с номерами этого человека, это просто информация, которую этот человек знает и желает поделиться с другими лицами.

1 Ответ

2 голосов
/ 26 марта 2012

Представление об объекте, инкапсулирующем номер телефона и адрес, кажется важным в вашем домене, поэтому у вас может быть что-то вроде сущности ContactInfo («Ассоциация» кажется слишком расплывчатой), содержащей PhoneNumber и Address. Телефон и адрес на самом деле не «меняются» сами по себе - скорее меняется ContactInfo, так что вы можете сделать их объектами значения.

Персона останется совокупным корнем и единственной сущностью, имеющей Репозиторий. Вы просто позвоните person.AddContactInfo (), чтобы добавить новую контактную информацию, и контактная информация будет сохранена позже вместе с этим человеком.

...