Skip to content

Messages

Gennady Lebedev edited this page Dec 14, 2019 · 4 revisions

Сообщения в дизайне рудиментов - это общий тип для Command, Event, Error и Effect, всего того, чем обмениваются компоненты при выполнении программы.

В основном сценарии описан контекст работы сообщений.

Все Message является DTO, в них нельзя передавать несериализуемые значения (контексты, дескрипторы, процессы, коннекшны и т.п.).

Message Hierarchy

Command

Запрос на выполнение действия. Есть сильное требование, что для любой Command в Memory обязательно появится терминальный Event или Error. Команда без конечного сообщения в памяти считается выполняемой в текущий момент времени.

Effect

То, что произошло в процессе выполнения Command, промежуточный результат. У одной Command может быть произвольное количество Effect. Могут создаваться

  • в Application - эффекты ЖЦ, описывающие какой компонент обрабатывает команду, какие другие команды были порождены для этого
  • в Service - промежуточные результаты

Введение Effect дает возможность сказать, что обычные текстовые логи не нужны, их функционал и ответственность полностью покрываются эффектами. Но никто не запретит сделать adapter для логирования в файл/ELK/куда-угодно-еще, который будет по проекции получать эффекты.

Event

Результат выполнения действия, терминальный Effect. После получения Event поток, связанный с конкретной Command не должен содержать ничего, что повлияло бы на бизнес-результат или отменяло бы его.

Error

Вариант Event, когда выполнение Command не обработана правильно, с ошибкой.

Подобно Exception, Error может быть обработан по разному. Обычно подразумевается, что Error - это сигнал что дальше обработать Command нельзя и следует прервать выполнение запроса.

Но в отличие от Exception, Error и Event не отличаются по механике и оверхеду на выполнение, их можно и нужно использовать для управления логикой приложения, если задача подразумевает специальную обработку ошибок.

Clone this wiki locally