Событийная модель

Карта операционной среды намечена в прошлом уроке — начинаем строить первый слой: агент переходит с ручного запуска на реакцию на события — письмо, заявку, платёж, обращение. Разберёмся, что для этого нужно.

Всё — событие

Каждый день в бизнес прилетает десяток разных сигналов: письмо от клиента, сообщение в корпоративном чате, платёж на счёт, новая заявка на сайте, сработавший датчик остатков на складе. Для человека это разные по природе вещи — на письмо реагируют иначе, чем на платёж. Для среды, которую мы строим, разницы между ними нет: всё это — события.

Представь приёмную большой компании, куда одновременно приходят курьер с посылкой, официальное письмо от контрагента и внутренняя докладная записка. Все три сначала попадают в один и тот же журнал регистрации: от кого, когда, что за документ. И только после регистрации содержимое расходится по нужным отделам. Так же устроена событийная модель: любой сигнал, прежде чем система начнёт с ним что-то делать, упаковывается в одинаковый конверт — единую схему полей вне зависимости от того, откуда сигнал пришёл. Тип события, источник, время, содержимое — эти поля заполняются всегда, письмо это было или показание датчика.

Именно единый конверт даёт масштаб. Если бы для каждого источника — почты, чата, CRM, банка — приходилось писать отдельную ветку логики «что делать, когда пришло вот это», добавление каждой новой системы удваивало бы сложность. А если агенту, читающему события, всё равно, что перед ним — письмо или сработавший таймер, — новый источник данных превращается в задачу «научить один переводчик заполнять уже существующий конверт». Как именно пишутся такие переводчики, разберём отдельно; здесь достаточно понимать, зачем конверт должен быть единым.

Маршрут события

Попав в конверт, событие не разбредается куда попало — оно идёт по фиксированному маршруту, одному и тому же для любого типа события:

  1. Событие попадает в среду.
  2. Система определяет, какая роль отвечает за события такого типа.
  3. Роль находит плейбук события — инструкцию «как реагировать на такое».
  4. Роль выполняет действие в рамках своих прав.
  5. Каждый шаг записывается в журнал.

Это управляемый цикл, а не самодеятельность. Разница принципиальна: точечный скрипт-затычка из прошлого урока, который закрывает один процесс, обычно реагирует на событие в обход всякого маршрута — логика зашита прямо в код, никто, кроме автора, не помнит, почему она такая. Событийный маршрут делает то же самое воспроизводимым: любой человек в компании может увидеть, по какому пути прошло конкретное событие — не потому что кто-то удосужился записать вручную, а потому что маршрут…

🔒

Этот материал доступен участникам Клуба. Войдите или оформите доступ, чтобы читать целиком, открывать видео и комментировать.

Войти Вступить / купить доступ