Я работаю над приложением, основанным на событиях, в соответствии с принципами DDD и CQRS, которое позволяет размещать объявления о продаже товаров.
Есть один конкретный инвариант, который я пытаюсь смоделировать, который, как представляется, включаетмассовое обновление AR, и я не знаю, как это сделать.
Инвариант таков:
- Участник может опубликовать объявление
- Участник может быть заблокирован администратором
- Если участник заблокирован, его объявления должны быть приостановлены
для целей обсуждения, объявление должно иметь статус, поскольку участник может купить элемент, нажав на объявление, поэтому важно знать, является ли оно активным.
Я спроектировал свои совокупные корни так:
- Участник
- Объявление
- Заказ
Член может быть покупателем или продавцом, в зависимости от контекста, поэтому я украшаю объект члена по мере необходимости.
Когда объявления публикуются, они, конечно, вставляются в прочитанную модель.
Теперь, когда участник забанен, происходит событие, связанное с тем, что член AR запускается.MemberWasBanned (MemberId)
Мой вопрос: как мне найти все объявления, которыми владеет участник, и приостановить их?
Несмотря на то, что я мог рассчитывать на статус участника для транзакции покупки, важно, чтобы объявление отслеживало его статус, поскольку существуют другие подобные операции, которые могут инициировать отправку электронного сообщения, например, участнику, указывающего, что его объявлениябыли приостановлены по той или иной причине.
Таким образом, мой лучший подход после долгих размышлений - создать длительный процесс, в котором я создаю обработчик для MemberWasBanned, а затем иду искать его активные объявления в прочитанноммодели и выполните команды, чтобы приостановить их одну за другой.
Я что-то упустил?Я думал об использовании диспетчера процессов, но читал, что вы не должны обращаться к стороне чтения из PM.В любом случае, PM в большинстве случаев определяет команду, отправленную в ОДИН АР.
Я что-то упустил?