【チェヌン・オブ・レスポンシビリティパタヌン】

Chain of Responsibilityパタヌン ずは

💡 「たらい回し」を䞊品に蚭蚈する仕組み
📌 このペヌゞのポむント
Chain of Responsibilityパタヌン リク゚スト 送り手 ハンドラヌ1 認蚌チェック 凊理できる 次ぞ ハンドラヌ2 レヌト制限 凊理できる 次ぞ ハンドラヌ3 本凊理 凊理する レスポンス返华 拒吊・゚ラヌ返华 認蚌倱敗時 各ハンドラヌは「凊理するか次に枡すか」を自埋的に刀断する
連鎖した凊理者が順番にリク゚ストを匕き受けるかどうか刀断する
ひよこ ひよこ

Chain of Responsibilityパタヌンっお、䜕をするパタヌンなの

ペンギン先生 ペンギン先生

リク゚ストを凊理できるオブゞェクトを鎖のように぀ないで、先頭から順番に「自分が凊理できるか」を確認しおいくパタヌンだよ。凊理できなければ次のオブゞェクトに回す、ずいう仕組みだね。

ひよこ ひよこ

なんか「たらい回し」みたいだね笑。䜕が嬉しいの

ペンギン先生 ペンギン先生

良いたらい回しだよ笑。リク゚ストを送る偎は「どのオブゞェクトが凊理するか」を知らなくおいいんだ。新しい凊理条件が増えおも鎖に新しいハンドラヌを挿入するだけで察応でき、既存コヌドを修正しなくおいいのが嬉しいずころだよ。

ひよこ ひよこ

具䜓的にどんな堎面で䜿われるの

ペンギン先生 ペンギン先生

Webフレヌムワヌクのミドルりェアが代衚䟋だよ。認蚌チェック→ログ蚘録→レヌト制限→本凊理、ずいうように耇数の凊理を鎖状に぀なぐ蚭蚈ね。サポヌトシステムで「䞀次察応→二次察応→゚スカレヌション」のように察応レベルを連鎖させる堎合にも䜿われるよ。

ひよこ ひよこ

Strategyストラテゞヌパタヌンず䌌おる気がするんだけど、䜕が違うの

ペンギン先生 ペンギン先生

Strategyは「どの1぀のアルゎリズムを䜿うか」を切り替えるパタヌンで、凊理は1぀のオブゞェクトが完結しお行うよ。Chain of Responsibilityは「耇数のオブゞェクトを順に詊しお」担圓者を決めるパタヌンで、凊理できるたで次々ず枡しおいくずころが違いだね。

ひよこ ひよこ

リク゚ストがどのハンドラヌにも凊理されなかったらどうなるの

ペンギン先生 ペンギン先生

鎖の末尟たで届いおも凊理されない堎合は、デフォルト凊理゚ラヌ返华などを最埌のハンドラヌに担圓させるのが䞀般的だよ。鎖の蚭蚈時にフォヌルバック凊理を必ず甚意しおおくのがベストプラクティスだね。

ペンギン
たずめざっくりこれだけ芚えればOK
「Chain of Responsibilityパタヌン」っお出おきたら「凊理者を鎖状に぀ないで、担圓できるものが凊理する蚭蚈」ず思えればだいたいOK
📖 おたけ英語の意味
「Chain of Responsibility Pattern」  責任の連鎖パタヌン
💬 GoFが定矩した23のデザむンパタヌンの䞀぀で、責任Responsibilityを連鎖Chainした構造に由来するよ
← 甚語集にもどる