-
Notifications
You must be signed in to change notification settings - Fork 0
Messages
Сообщения в дизайне рудиментов - это общий тип для Command, Event, Error и Effect, всего того, чем обмениваются компоненты при выполнении программы.
В основном сценарии описан контекст работы сообщений.
Все Message является DTO, в них нельзя передавать несериализуемые значения (контексты, дескрипторы, процессы, коннекшны и т.п.).
Запрос на выполнение действия. Есть сильное требование, что для любой Command в Memory обязательно появится терминальный Event или Error. Команда без конечного сообщения в памяти считается выполняемой в текущий момент времени.
То, что произошло в процессе выполнения Command, промежуточный результат. У одной Command может быть произвольное количество Effect. Могут создаваться
- в
Application- эффекты ЖЦ, описывающие какой компонент обрабатывает команду, какие другие команды были порождены для этого - в
Service- промежуточные результаты
Введение Effect дает возможность сказать, что обычные текстовые логи не нужны, их функционал и ответственность полностью покрываются эффектами. Но никто не запретит сделать adapter для логирования в файл/ELK/куда-угодно-еще, который будет по проекции получать эффекты.
Результат выполнения действия, терминальный Effect. После получения Event поток, связанный с конкретной Command не должен содержать ничего, что повлияло бы на бизнес-результат или отменяло бы его.
Вариант Event, когда выполнение Command не обработана правильно, с ошибкой.
Подобно Exception, Error может быть обработан по разному. Обычно подразумевается, что Error - это сигнал что дальше обработать Command нельзя и следует прервать выполнение запроса.
Но в отличие от Exception, Error и Event не отличаются по механике и оверхеду на выполнение, их можно и нужно использовать для управления логикой приложения, если задача подразумевает специальную обработку ошибок.