Я изучал DDD в течение последних нескольких дней и изо всех сил пытался понять некоторые основные концепции совокупных корней. Может быть, кто-нибудь мог бы дать мне pu sh в правильном направлении и уточнить, что является лучшей практикой в этом сценарии:
Чтобы сделать этот пример менее сложным, скажем, у нас есть область двух сущностей: ресторан и время открытия. Ресторан определяется как совокупность root.
Из того, что я понял во всех онлайн-примерах (поправьте меня, если я ошибаюсь), совокупность root стремится загрузка всех дочерних объектов каждый раз, когда мне нужен экземпляр этого. Поэтому всякий раз, когда я хочу вызвать метод вызова в ресторане, загружаются все часы работы (независимо от того, используются они или нет).
В этом примере я хочу убедиться, что пересечение времени открытия отсутствует когда в этот ресторан добавят новое время. В этом случае активная загрузка любого другого времени открытия имеет смысл, потому что мне нужно сравнить их с существующими.
НО: это своего рода ограничение, потому что я знаю каждый раз, когда хочу добавить еще одну коллекцию чего-либо (скажем, изображения ресторанов), нагрузка SQL становится все тяжелее и тяжелее, хотя большинство методов требует только одну из коллекций.
Я мог бы подумать о двух возможных решениях:
Ленивая загрузка
Ленивая загрузка времени открытия / суб-сущностей через прокси свойств структуры сущностей. Таким образом, совокупность root может существовать без необходимости загружать их, но всякий раз, когда они необходимы, к ним можно получить доступ. Однако везде, где я искал ответ, я заметил, что ленивая загрузка в совокупных корнях считается плохой практикой. Может быть, кто-то может объяснить, почему.
Меньшие совокупные корни
Конечно, я мог бы определить само время открытия как совокупность root, но тогда мне нужно взять бизнес logi c (в данном случае проверка пересечений) вне модели.
Во всех приведенных выше примерах я говорю только о командной стороне (а не о запросах или сериализации).
Возможно, мне не хватает некоторых фундаментальных идей. Как должны быть организованы агрегатные корни в этом примере и почему ленивая загрузка считается плохой практикой?
EDIT Не уверен, почему этот вопрос был закрыт из-за "основанного на мнении". Я спрашиваю передовой опыт и почему ленивая загрузка не в этом случае.