Чтение на CQRS есть много разговоров об уведомлении по электронной почте - мне интересно, откуда получить данные. Представьте себе senario, где один пользователь приглашает других пользователей к событию. Чтобы сообщить пользователю, что он был приглашен на мероприятие, ему отправлено электронное письмо.CQRS и уведомление по электронной почте
Конкретные шаги могут пойти как это:
CreateEvent
команда с соответствующей коллекцией пользователей Invite, принимается сервером.- Создается новый агрегат
Meeting
и вызывается методInviteUser
для каждого пользователя, который должен быть приглашен. - Каждый раз, когда пользователь приглашен на мероприятие, возникает событие домена
UserWasInvitedToEvent
. - Отправитель уведомления электронной почты принимает событие домена и отправляет уведомление по электронной почте.
Теперь, мой вопрос заключается в следующем: куда мне обратиться за информацией для включения в электронную почту?
Скажите, что я хочу включить описание события, а также имя пользователя. Поскольку это CQRS, я не могу получить его через мою модель домена; Все свойства объектов домена являются частными! Должен ли я затем запрашивать чтение? Или, возможно, переадресовать уведомление по электронной почте на другую услугу?
Невероятно, сколько разницы может сделать одно слово. Я хотел сказать, чтобы спросить сторону READ!Я знаю об основах CQRS :) В любом случае, что вы говорите, вы бы отправились в хранилище запросов для включения данных в электронную почту? Я вижу, как это может создать проблему, так как хранилище запросов может быть несовместимым с событием UserWasInvitedToEvent. Одним из возможных решений может быть компонент/служба, которая будет слушать новые собрания, пользователя и приглашения и хранить эти данные, чтобы он мог отправлять приглашения? – t0PPy
Да, это то, к чему я стремился. Есть такие вещи, как Saga в определенных системах обмена сообщениями, таких как NServiceBus, которые позволяют вам организовывать несколько обработчиков событий, которые не обязательно поступают в том же порядке каждый раз. Возможно, вы захотите изучить это. Они действуют как рабочий процесс, который позволит вам подождать всю соответствующую информацию перед выполнением некоторых действий. –
Спасибо за ваш ответ - извините, что не вернулись к этому давно. Мне нравится то, что вы описываете, но я обнаружил, что предпочитаю немного другой подход: обогащение события. – t0PPy