Почему Команды необходимы в сагах, основанных на хореографии?

Одно ключевое различие, часто подчеркиваемое между Событиями и Командами в EDA, заключается в следующем:

События — это то, что произошло

Команды — это запросы на то, что может произойти.

Чего я не могу понять, так это того, почему реализации часто используют оба из них вместе, когда один всегда кажется избыточным? Например, когда нам нужно проверить, достаточно ли средств у клиента для выполнения заказа, мы можем добиться этого исключительно с помощью событий:

введите здесь описание изображения

На этой диаграмме нет никаких команд. Но в в этой статье предполагается, что в дополнение к событиям за кулисами создаются команды:

введите здесь описание изображения

В чем преимущество включения сюда команд, не добавляет ли это сложности? И на какое из двух событий фактически подписывается служба поддержки клиентов: на CreatePendingOrderCommand или на OrderCreatedEvent? Служба поддержки работает только с одним из них?


person FBryant87    schedule 28.06.2020    source источник


Ответы (2)


Чего я не могу понять, так это того, почему реализации часто используют оба из них вместе, когда один всегда кажется избыточным?

В общем, это не одно и то же; только в простых случаях информация избыточна.

Команды чем-то похожи на предложения: это сообщения, которые мы отправляем неким властям, чтобы произвести какие-то изменения. События – это сообщения, отправляемые от какого-либо органа.

Команды доставляют новую информацию органу власти. События описывают, как информация была интегрирована с тем, что было известно ранее.

События описывают информацию, которая будет доступна при обработке будущих команд — эта информация надежна; команды являются временными.

Команды часто генерируются из устаревшего неавторизованного снимка некоторой информации (отчета или представления). События являются отражением состояния самой власти.

События расходятся от авторитета; мы знаем отправителя, но не обязательно получателя. Команды переходят в авторитет, мы знаем получателя, но не обязательно отправителя.

Он довольно мягкий. Мы делаем копии структуры данных, и в какой-то момент наша перспектива меняется, и хотя исходная структура данных является событием, копия является командой.

Подумайте о подписке: система скопирует структуру данных из моего выходного потока (события) в ваш входной поток (команду).

Мое предложение: это все просто сообщения. Позвольте себе оставить его там, пока у вас не будет больше кругов за поясом.

person VoiceOfUnreason    schedule 28.06.2020

я бы сказал

Команда может генерировать любое количество событий.

Команды могут быть отклонены.

События произошли.

person cool    schedule 28.06.2020
comment
Команда может генерировать любое количество событий — команда — это DTO. Он не может ничего излучать. - person tom redfern; 29.06.2020