Вы задали очень похожий вопрос как минимум три раз . Домен всегда один и тот же: спортивные команды, лиги и игроки, но предоставленные вами данные всегда разные, поэтому вы получаете и принимаете разные ответы. Вы явно в состоянии анализа паралича. Существует очень мало шансов, что вы придумали идеальную модель в первый раз. Начните писать код и тесты, и вы получите немедленную обратную связь. Ищите запахи кода, появится рефакторинг, и появится лучшая модель.
По поводу этой версии вопроса. Агрегат определение :
Кластер связанных объектов, которые рассматриваются как единое целое для
цель изменения данных. Внешние ссылки ограничены одним
член Агрегата, обозначенный как корень. Набор согласованности
правила применяются в пределах Агрегата.
И классический пример - это «Порядок в качестве совокупного корня» и «Порядок линий в качестве сущностей», которые являются частью «Порядка совокупности». Обратите внимание, что строки заказа не имеют смысла вне заказа.
В вашем случае правило «команда не может существовать без лиги» отличается. Недостаточно объявить Команду частью Агрегата Лиги. Это похоже на «Заказ не может существовать без Клиента». Это не означает, что Клиент является частью Агрегата заказа. Клиент - это собственный агрегат, он имеет смысл сам по себе. Так же, как команда имеет смысл сама по себе, у нее есть своя история, фанаты и т. Д.
К этой проблеме также можно подходить с позиции «обмена данными». В примере Эвана весь Орден блокируется, чтобы можно было применять внутренние инварианты. Если вы вносите изменения в Лигу, хотите ли вы, чтобы все команды и игроки также были заблокированы?
Итак, на основании информации, которую вы предоставили на этот раз, вам нужно два Агрегата: Лига и Команда. Имейте в виду, что агрегаты могут ссылаться друг на друга.