Chain of Responsibilityパターン - リクエスト処理パイプライン
リクエスト処理パイプラインを構築するChain of Responsibilityパターンを学びましょう。ミドルウェア、バリデーションチェーン、イベントハンドリングのTypeScript実装例。
Behavioral
詳細な説明
Chain of Responsibilityパターン
Chain of Responsibilityパターンは、ハンドラーをチェーンにリンクし、いずれかのハンドラーが処理するまでリクエストをチェーンに沿って渡します。各ハンドラーは、リクエストを処理するか次のハンドラーに渡すかを決定します。
Express.jsミドルウェア
JavaScriptにおけるChain of Responsibilityの最も有名な実装はExpress.jsミドルウェアです。各app.use()がチェーンにハンドラーを追加し、next()がリクエストを次のハンドラーに渡します。
バリエーション
- 線形チェーン: 各ハンドラーは正確に1つの後続者を持つ
- ツリーチェーン: ハンドラーは複数の後続者に委譲できる(DOMイベントバブリングのように)
- 終了 vs 非終了: リクエストを処理できる最初のハンドラーで停止するチェーンと、すべてのハンドラーがリクエストを処理するチェーン(イベントリスナーのように)
エラーハンドリング
適切に設計されたチェーンには、前のハンドラーからのエラーをキャッチしてフォーマットするエラーハンドリングミドルウェアが最後に含まれます。これはまさにExpress.jsのエラーミドルウェアの仕組みです。
ユースケース
Chain of Responsibilityは、HTTPミドルウェアスタック(Express、Koa、Fastify)、入力バリデーションチェーン(フォーマット確認、範囲確認、ビジネスルール確認)、重大度レベルを持つロギングパイプライン、テクニカルサポートのエスカレーションシステム、DOMイベントのバブリング/キャプチャリングの基盤です。