Я новичок в DDD, поэтому, пожалуйста, казните меня, если какой-то термин / понимание откусили. Но, пожалуйста, поправьте меня, и мы будем благодарны за любые советы.
Допустим, я создаю сайт социальной доски объявлений и определила свои общие корни: кандидаты, вакансии и компании. Очень разные вещи / контексты, поэтому у каждого есть собственная таблица базы данных, репозиторий и сервис. Но теперь мне нужно создать домашнюю страницу в стиле Pinterest, где блоки данных отображают данные либо о кандидате, либо о вакансии, либо о компании.
Теперь сложная часть состоит в том, что блоки данных должны быть упорядочены по тому моменту, когда в последний раз что-то произошло с агрегатом, который он представляет (компания понравилась / прокомментирована, или задание было обновлено, и т. Д.), И разбиение по страницам происходит в форме бесконечной прокрутки, снова точно так же, как Pinterest. Поскольку с этими агрегатами все происходит независимо, у меня нет способа узнать, сколько агрегатов находится на какой-либо конкретной странице. (но если бы я сделал, кстати, таблицу, которая отслеживает время последнего обновления агрегатов, у меня нет другого выбора, кроме как продвинуть это как еще один агрегированный корень с собственным репозиторием?)
Где мне реализовать логику разбиения по страницам? Я где-то читал, что должна быть одна служба на репозиторий для каждого совокупного корня, поэтому мне следует сортировать и подстраивать страницы в контроллере (кстати, я использую MVC)? Или должна существовать независимая служба приложений, которая выполняет подобные вещи, пересекающие границы? В любом случае мне нужно получить ВСЕ объекты для ВСЕХ агрегатов из базы данных?
Это уже слишком много вопросов, но я в основном спрашиваю:
- Что такое постраничная презентация, бизнес-логика или постоянная логика? Какой горизонтальный слой?
- Где должен находиться код пересечения границ в DDD? Какой вертикальный стек?