Условия в случае штурма

#domain-driven-design

Вопрос:

Я объясню это как проблему с приложением альбома.

Я хочу создать новое Album , но Artist то, что Album еще не создано.

Есть 2 решения для решения этой проблемы:

  1. Создайте Artist первый, затем создайте второй Album
  2. При создании Album проверьте Artist , создано ли оно. Если Artist он не создан, то создайте новый Artist и сохраните эту информацию в Album .

Я выбрал решение 2 и хочу представить его с помощью штурма событий.

Я не знаю, как правильно представить решение в порядке временной шкалы.

Итак, я пришел к этому.

Моя Доска для Штурма Событий

Я не знаю, правильно ли мое решение или нет 🙁

И если это не так, как правильно это представить?

Ответ №1:

Я бы попытался сделать каждый шаг явным, чтобы вы также могли легко определить, какие транзакции происходят с какой совокупностью. Поэтому я предполагаю, что вы видите исполнителя и альбом как отдельные агрегаты (на данный момент не имеет значения, находятся ли они в одном ограниченном контексте или нет). Я бы подошел к нему в случае штурма сессии примерно так:

  • —> Создать альбом (Команда)
  • —> Создан альбом (Событие)
  • —> Проверьте исполнителя созданного альбома (Политика)
  • —> Создать исполнителя (Команда)
  • —> Созданный художник (Событие)
  • —> Проверьте наличие существующих альбомов Нового исполнителя (Политика)
  • —> Связать исполнителя с альбомом (Команда)
  • —> Обновлен исполнитель альбома (Событие)

Для меня политики обычно означают: когда применяется политика X, выполните команду Y.

С помощью этого потока вы также гарантируете, что одновременно создается/изменяется только один агрегат. Ваш нынешний подход связывает простое создание нового альбома с множеством других обязанностей за один раз (например, проверка того, существует ли уже исполнитель, если да, создание исполнителя и последующее создание альбома). Мне нравится делать самые важные вещи как можно быстрее и проще, а также разделять последующие шаги. Поэтому здесь я бы счел создание альбома высшей целью пользователя приложения. Потому что, если они сначала не создали исполнителя, им, очевидно, сейчас больше нравится сосредотачиваться на создании альбома. Если объект исполнителя создается на втором этапе, это не должно вызывать у пользователя особого беспокойства.

Комментарии:

1. Если для хранения альбома в базе данных требуется исполнитель, работает ли ваше решение по-прежнему?