Цепочка обработчиков в Iron реализует модель последовательной обработки запроса, при которой каждый модуль получает управление по очереди, может модифицировать контекст выполнения и либо передать управление дальше, либо завершить выполнение.
Основная идея заключается в разделении логики на независимые функции-обработчики, каждая из которых выполняет строго определённую задачу:
Каждый обработчик получает единый объект контекста и функцию перехода к следующему звену цепи.
Центральным элементом цепочки является объект контекста. Он существует на протяжении всего жизненного цикла запроса и передаётся по цепочке без копирования.
Контекст обычно содержит:
Ключевой принцип: все изменения состояния происходят через контекст, а не через глобальные переменные.
Каждый обработчик представляет собой функцию с фиксированной сигнатурой:
Обработчик может:
Пример логики поведения:
Цепочка выполняется строго по порядку регистрации обработчиков.
Поведение можно описать следующим образом:
Любое прерывание цепочки останавливает дальнейшее выполнение.
Iron поддерживает смешанную модель выполнения, где цепочка может содержать как синхронные, так и асинхронные функции.
Используются для быстрых операций:
Такие обработчики выполняются мгновенно и не блокируют поток ожидания.
Применяются при необходимости взаимодействия с внешними системами:
Асинхронный обработчик обязан корректно завершить выполнение до передачи управления дальше.
Контроль выполнения цепочки осуществляется через вызов функции перехода.
Существует несколько сценариев:
Обработчик завершает свою работу и вызывает следующий элемент цепочки.
Если дальнейшая обработка не требуется, цепочка завершается без вызова последующих обработчиков.
Обработчик может изменить поведение цепочки, например:
Ошибки в Iron обрабатываются как отдельный поток выполнения.
При возникновении исключения:
Обработчики ошибок имеют ту же структуру, но получают дополнительную информацию о причине сбоя.
Цепочка в Iron строится как композиция независимых модулей. Это позволяет:
Композиция обеспечивает гибкость архитектуры и упрощает масштабирование приложения.
Iron поддерживает возможность вложенных цепочек, когда один обработчик запускает собственную последовательность обработки.
Такой подход используется для:
Вложенные цепочки работают на том же контексте или на его производной копии, в зависимости от конфигурации.
Порядок регистрации обработчиков напрямую определяет их приоритет.
Типичные сценарии:
Нарушение порядка регистрации может привести к некорректной работе цепочки.
Каждый обработчик имеет право модифицировать контекст.
На практике это используется для:
Важно, что изменения контекста сохраняются для всех последующих обработчиков.
При разработке сложных цепочек особое значение имеет наблюдаемость.
Часто используются подходы:
Это позволяет точно определить место возникновения ошибок или замедлений.
Цепочка обработчиков в Iron обычно реализует несколько архитектурных паттернов:
Каждый обработчик расширяет или модифицирует запрос.
Запрос последовательно передаётся между обработчиками до момента обработки.
Каждый слой может оборачивать предыдущий, добавляя дополнительную логику.
При работе с цепочками часто встречаются следующие проблемы:
Такие ошибки приводят к снижению предсказуемости системы и усложняют поддержку.
Производительность зависит от количества обработчиков и их сложности.
Основные факторы влияния:
Оптимизация обычно сводится к сокращению лишних слоёв и минимизации операций внутри middleware.