Arhn - архитектура программирования

Помогите определить общие корни

Я застрял в водовороте аналитического паралича, пытаясь применить DDD к различным приложениям, которые я либо разработал в прошлом, либо планирую делать в будущем.

Возьмем, к примеру, простую лигу софтбола. У нас есть лиги, команды, принадлежащие лиге (только одной), и игроки, принадлежащие одной команде. Я знаю, что эти правила могут различаться, но давайте просто притворимся.

как я понимаю, команда не может существовать без лиги, и если вы удаляете лигу, вы удаляете все принадлежащие ей команды (а также игроков), поэтому у меня здесь есть одна совокупность, корнем которой является лига. теперь команды также являются важной концепцией, значит ли это, что команда также может быть корнем агрегата? Эванс утверждает, что когда вы удаляете совокупный корень, все его внутренние элементы также удаляются, так что это оставит команду без родительской лиги.

если кто-то может пролить свет, я был бы очень благодарен.

Благодарность


Ответы:


1

Вы задали очень похожий вопрос по крайней мере три раза. Домен всегда один и тот же: спортивные команды, лиги и игроки, но детали, которые вы предоставляете, всегда разные, поэтому вы получаете и принимаете разные ответы. Вы явно в состоянии аналитического паралича. Вероятность того, что вы с первого раза придумаете идеальную модель, очень мала. Начните писать код и тесты, и вы получите немедленную обратную связь. Ищите запахи кода, рефакторинг, и появится лучшая модель.

По поводу этой версии вопроса. Совокупное определение:

Кластер связанных объектов, которые рассматриваются как единое целое с целью изменения данных. Внешние ссылки ограничены одним членом Aggregate, обозначенным как корень. Набор правил согласованности применяется в пределах границ Агрегата.

И классический пример — Заказ как корень Агрегата и Строки Заказа как Сущности, являющиеся частью Агрегата Заказов. Обратите внимание, что Строки Заказа не имеют смысла вне Заказа.

В вашем случае правило "команда не может существовать без лиги" другое. Недостаточно объявить Команду частью Совокупной Лиги. Это похоже на "Заказ не может существовать без Заказчика". Это не означает, что Клиент является частью Агрегата Заказа. Клиент сам по себе Совокупность, он имеет смысл сам по себе. Точно так же, как команда имеет смысл сама по себе, у нее есть своя история, фанаты и т. д.

К этой проблеме также можно подойти с точки зрения «обмена данными». В примере Эвана блокируется весь Орден, чтобы можно было применить внутренние инварианты. Если вы вносите изменения в лигу, хотите ли вы, чтобы все команды и игроки также были заблокированы?

Итак, основываясь на информации, которую вы предоставили на этот раз, вам нужны два агрегата: лига и команда. Имейте в виду, что агрегаты могут ссылаться друг на друга.

09.09.2011
  • спасибо, и я приму ваш совет и просто начну кодировать и тестировать! просто чем больше читаю, тем больше путаюсь. например, теперь я прочитал, что строки заказа в подходе класса должны быть объектом значения! это просто взорвало мой разум. 09.09.2011
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..