DDD Как правильно выделить агрегаты и сущности
Помогите пожалуйста составить корректное видение архитектуры. Разрабатывается платформа для обучения. Имеются следующие понятия:
- Папка (Категория)
- Курс
- Тема
- Урок
- Тест
Присутствует линейная вложенность от начала к концу списка:
- В Папке может быть много курсов (может и не быть)
- В Курсах может быть много тем (может и не быть)
- В Темах может быть много уроков (может и не быть)
- В Уроках может быть много тестов (может и не быть)
В теории корневым агрегатом выступает Папка (категория) и без её наличия ничего нижестоящего быть не может. В то же время, например, Тесты могут обладать своими свойствами, например список пользователей, которые их прошли. И получается, во первых, сущность ссылается на агрегат, а во вторых чтобы управлять всеми вложенными сущностями в Папку нужно очень много методов добавить в агрегат. И вот я не пойму как правильно разбить эту цепочку.
Заранее спасибо за помощь.
Ответы (1 шт):
Было решено сделать каждый из элементов самостоятельным агрегатом, а каждый вышестоящий просто содержит набор идентификаторов нижестоящего уровня. Это помогло сделать их независимыми и добавлять конфигурирование на любой из этих уровней независимо. И получается, что внутри своего ограниченного контекста они обособлены, но входят в связь с другим контекстом. Возможно это не самое лучшее решение поскольку с точки зрения архитектуры на один и тот же уровень могут ссылаться другие, что неправильно. Но ничего лучше не было придумано