Featured image of post コードシェフの仕込み帳【Proxy】見えない守衛〜同じ問い合わせを毎回繰り返すコードを、本物と同じ窓口を持つ代理でまとめる〜

コードシェフの仕込み帳【Proxy】見えない守衛〜同じ問い合わせを毎回繰り返すコードを、本物と同じ窓口を持つ代理でまとめる〜

権限チェックとキャッシュが3つの呼び出し元に散在し、1か所の書き忘れでセキュリティバグ。ProxyパターンをPerlとMooで実装し、実APIと同じcheck_stockシグネチャを持つ代理クラスが認可とキャッシュを一か所で担い、呼び出し元はオブジェクトを差し替えるだけにする。

Featured image of post コードシェフの仕込み帳【Chain of Responsibility】誰が受け取るか〜承認フローを焼き込んだコードを、連鎖するハンドラオブジェクトで整理する〜

コードシェフの仕込み帳【Chain of Responsibility】誰が受け取るか〜承認フローを焼き込んだコードを、連鎖するハンドラオブジェクトで整理する〜

承認フローをstore別に関数コピーして閾値変更が反映されずバグ。Chain of ResponsibilityパターンをPerlとMooで実装し、ハンドラが限度額を属性として持ち実行時にチェーンを組む設計で、コピーなしに店舗別ポリシーを実現する。

Featured image of post コードシェフの仕込み帳【Iterator】順に辿る道〜注文履歴の内部表現を知りすぎたコードを、一件ずつ渡す走査インターフェースで整理する〜

コードシェフの仕込み帳【Iterator】順に辿る道〜注文履歴の内部表現を知りすぎたコードを、一件ずつ渡す走査インターフェースで整理する〜

注文履歴を配列で持つクラスの内部をファイルに変えたら、全コードが壊れた。IteratorパターンをPerlとMoo::Roleで実装し、「一件ずつ渡す窓口」を作ることで内部表現の変更が外に波及しない設計へ。仕組みから丁寧に解説します。

Featured image of post コードシェフの仕込み帳【Facade】注文は一言で十分だ〜注文ハンドラが厨房の段取りを全部知っているコードを、窓口クラス一枚で整理する〜

コードシェフの仕込み帳【Facade】注文は一言で十分だ〜注文ハンドラが厨房の段取りを全部知っているコードを、窓口クラス一枚で整理する〜

注文ハンドラが厨房の仕込み・加熱・盛り付けを直接呼ぶ密結合なコードを、Facadeパターンで整理します。PerlとMooで「窓口クラス一枚」を設け、呼び出し元が厨房の内部変更に影響されない設計へ。仕組みから丁寧に解説します。

Featured image of post コードシェフの仕込み帳【Composite】コースの中にコースがあっても〜単品とセットを if で分ける料金計算を、同じ顔で合計する〜

コードシェフの仕込み帳【Composite】コースの中にコースがあっても〜単品とセットを if で分ける料金計算を、同じ顔で合計する〜

単品とコースを if で分けて計算し、コースの中にコースが入ると合計が崩れるコードを、Compositeパターンで整理します。PerlとMooで単品もコースも同じ顔で扱い、合計を再帰的に求める設計へ。仕組みから丁寧に解説します。

Featured image of post コードシェフの仕込み帳【Decorator】包んで一味足す〜トッピングのたびにフラグが増えるコードを、積み重ね可能な部品で整理する〜

コードシェフの仕込み帳【Decorator】包んで一味足す〜トッピングのたびにフラグが増えるコードを、積み重ね可能な部品で整理する〜

トッピング追加のたびにcostとdescribeの2か所修正が必要になるコードを、Decoratorパターンで整理します。PerlとMooで修正箇所を1クラスに同居させ、既存コードを変えずに追加できる設計へ。仕組みから丁寧に解説します。

Featured image of post コードシェフの仕込み帳【Factory Method】伝票は窓口に渡すだけでいい〜`new` する判断を呼び出し側から切り離し、追加が担当窓口の新設だけで済む設計へ〜

コードシェフの仕込み帳【Factory Method】伝票は窓口に渡すだけでいい〜`new` する判断を呼び出し側から切り離し、追加が担当窓口の新設だけで済む設計へ〜

通知の生成コードが複数サービスに散在し修正漏れが起きるコードを、Factory Methodパターンで整理します。PerlとMooで生成の判断を呼び出し側から切り離す設計へ。仕組みから丁寧に解説します。

Featured image of post コードシェフの仕込み帳【Template Method】仕込み帳を三冊書くな〜コピペした手順の修正漏れを、親クラスの骨格で一本化する〜

コードシェフの仕込み帳【Template Method】仕込み帳を三冊書くな〜コピペした手順の修正漏れを、親クラスの骨格で一本化する〜

日報生成クラス3種が同じ骨格をコピペで持ち、修正漏れが起きるコードを、Template Methodパターンで整理します。PerlとMooで骨格を親クラスに一本化し、変わる部分だけサブクラスに任せる設計へ。仕組みから丁寧に解説します。