#domain-driven-design
Вопрос:
Я объясню это как проблему с приложением альбома.
Я хочу создать новое Album
, но Artist
то, что Album
еще не создано.
Есть 2 решения для решения этой проблемы:
- Создайте
Artist
первый, затем создайте второйAlbum
- При создании
Album
проверьтеArtist
, создано ли оно. ЕслиArtist
он не создан, то создайте новыйArtist
и сохраните эту информацию вAlbum
.
Я выбрал решение 2 и хочу представить его с помощью штурма событий.
Я не знаю, как правильно представить решение в порядке временной шкалы.
Итак, я пришел к этому.
Я не знаю, правильно ли мое решение или нет 🙁
И если это не так, как правильно это представить?
Ответ №1:
Я бы попытался сделать каждый шаг явным, чтобы вы также могли легко определить, какие транзакции происходят с какой совокупностью. Поэтому я предполагаю, что вы видите исполнителя и альбом как отдельные агрегаты (на данный момент не имеет значения, находятся ли они в одном ограниченном контексте или нет). Я бы подошел к нему в случае штурма сессии примерно так:
- —> Создать альбом (Команда)
- —> Создан альбом (Событие)
- —> Проверьте исполнителя созданного альбома (Политика)
- —> Создать исполнителя (Команда)
- —> Созданный художник (Событие)
- —> Проверьте наличие существующих альбомов Нового исполнителя (Политика)
- —> Связать исполнителя с альбомом (Команда)
- —> Обновлен исполнитель альбома (Событие)
Для меня политики обычно означают: когда применяется политика X, выполните команду Y.
С помощью этого потока вы также гарантируете, что одновременно создается/изменяется только один агрегат. Ваш нынешний подход связывает простое создание нового альбома с множеством других обязанностей за один раз (например, проверка того, существует ли уже исполнитель, если да, создание исполнителя и последующее создание альбома). Мне нравится делать самые важные вещи как можно быстрее и проще, а также разделять последующие шаги. Поэтому здесь я бы счел создание альбома высшей целью пользователя приложения. Потому что, если они сначала не создали исполнителя, им, очевидно, сейчас больше нравится сосредотачиваться на создании альбома. Если объект исполнителя создается на втором этапе, это не должно вызывать у пользователя особого беспокойства.
Комментарии:
1. Если для хранения альбома в базе данных требуется исполнитель, работает ли ваше решение по-прежнему?