Может быть, для некоторых объектов реализации доменной логики требуется доступ к репозиторию для обновления/удаления себя или любого связанного объекта. Это правильно звучит??
могут ли модели домена знать о репозиториях?
Ответы (2)
Нет, по крайней мере, для вопроса, помеченного тегом "domain-driven-design". Определенно, паттерн Active Record имеет право жить в некоторых системах, и некоторые люди находят сильную связь полезной, но в DDD предлагается способ использовать репозитории явно:
Evans DDD, стр. 152. Для каждого типа объекта, которому требуется глобальный доступ, создайте объект, который может обеспечить иллюзию коллекции в памяти всех объектов этого типа. «...» Предоставляйте РЕПОЗИТОРИИ только для ОБЪЕДИНЕННЫХ корней, которым действительно нужен прямой доступ. Сосредоточьте внимание клиента на модели, делегируя хранение всех объектов и доступ к РЕПОЗИТОРИЯМ.
Итак, в DDD репозиторий инкапсулирует не только код инфраструктуры, необходимый для доступа к базе данных, но и всю идею того, что объекты должны храниться и загружаться.
Если вы выполняете сложные действия, включающие сохранение и загрузку из базы данных, то лучшими кандидатами являются сервисы, имеющие ссылки на репозитории.
Хотя для организации определенно кажется опасным иметь доступ к собственному репозиторию для сохранения или удаления себя (см. игнорирование сохраняемости), в некоторых случаях я мог допустить, что объект в исключительных случаях запрашивает из репозитория другой em> совокупный корень, на который он еще не содержит ссылку.
Однако обратите внимание, что объекты предметной области должны знать только об абстракциях репозиториев (т. е. об интерфейсах, находящихся на уровне предметной области), а не об их конкретных реализациях. Поэтому не делайте так, чтобы уровень домена ссылался на уровень инфраструктуры, а вместо этого внедряйте экземпляры конкретных репозиториев во время выполнения, когда они вам нужны.
И в любом случае это не должно быть нормой.