Запрос данных из readmodel в обработчике команд
У меня есть необходимость отправить электронное письмо в список администраторов в ответ на команду, отправленную из пользовательского интерфейса. Администраторы, которые должны быть уведомлены, извлекаются из запроса к модели чтения.
На данный момент - насколько я понимаю, у меня есть только один вариант: собрать необходимых администраторов перед отправкой команды и добавить их (пара имя / адрес электронной почты) в команду.
Или - допустимо ли перейти от обработчика команд к модели чтения? Это не правильно, но я не вижу другого способа сделать это?
3 ответа
Вы ничего не говорите о том, как вы реализовали командную часть. Обычно эта информация доступна в обработчике команд. Затем я запрашиваю источник данных для электронной почты и имени на основе идентификаторов, добавленных в команду. Вам не нужно проходить через модель предметной области, чтобы сделать это. Если у вас нет доступных данных на командной стороне, я не вижу большой проблемы со сбором данных со стороны чтения через службу. Я бы не стал делать это из модели предметной области.
Вы просто не можете получить доступ к модели чтения из своего домена, поскольку ваш домен является временным, а не ваша модель чтения. Вы должны иметь список электронных писем, которые были получены во время команды:)
Вы можете или включить в команды, которые запускают почту, список адресов электронной почты администратора. Затем он сохраняется как событие и временно, или вы могли бы создать объект вашего домена для создания экземпляра другого объекта домена, который получит электронные письма администратора списка.
Надеюсь, это поможет.
Предполагая, что ваши команды генерируют события...
Для меня правильным способом было бы иметь отдельный обработчик событий для захвата события команды и запуска отправки электронной почты. Ваш обработчик событий запросит у существующей модели чтения список администраторов.
Сохраняет простоту, так как ваш обработчик команд не должен знать об этой необходимости по электронной почте администраторам.
Вы могли бы пойти до крайности концептуально иметь отдельную систему для этого, которая также обрабатывает ваши созданные администратором / удаленные события, сохраняя их в определенной модели чтения только для хранения списка администраторов, которым нужно отправить электронное письмо.