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イベントのバブリング/キャプチャリングの基盤です。

試してみる — Design Pattern Reference

フルツールを開く