Глобальный доступ к объектам; Когда следует использовать репозитории, управляемые доменом
Я следовал принципам DDD (следуя книге Эрика Эванса по этой теме), однако недавно я начал перечитывать книгу и заметил, что, похоже, отклонился от одного из принципов repositories
...
"Для каждого типа объекта, которому требуется глобальный доступ, создайте объект, который может создать иллюзию коллекции в памяти..."
Я отклонился от этого в том, что я создаю repository
для каждого aggregate
и обнаружил, что это подходит мне хорошо. Даже когда aggregate
само по себе связано с другим aggregate
это просто вопрос обращения к связанному агрегату repository
при создании entity
(обычно внутри фабрики).
Я обнаружил преимущества этого при выполнении таких операций, как кэширование в моих репозиториях. Это также действительно упрощает разделение между созданием / сохранением объекта и доменом.
Может кто-нибудь дать мне пример того, где этот "Глобальный доступ" не подходит, чтобы помочь мне понять, где я ошибся.
1 ответ
Я считаю, что вы используете неправильные термины... Агрегат не может содержать другие агрегаты. У вас, вероятно, есть связь между этими агрегатами.
В любом случае, у каждого агрегата должен быть репозиторий, иначе вы делаете что-то не так. Также лучше использовать репозиторий для загрузки агрегата, а не ассоциации из другого агрегата. Если вы сохраняете свою связь (возможно, потому что ваш ORM облегчает задачу), вы не разбили агрегаты полностью.