「注文する」「取り消す」操作が手続きとして散らばり、取り消しも履歴も持てないコードを、Commandパターンで整理します。PerlとMooで操作をexecute/undoを持つ部品にまとめ、やり直しのきく形へ。仕組みから丁寧に解説します。
単品とコースを if で分けて計算し、コースの中にコースが入ると合計が崩れるコードを、Compositeパターンで整理します。PerlとMooで単品もコースも同じ顔で扱い、合計を再帰的に求める設計へ。仕組みから丁寧に解説します。
外部モジュールの内部仕様への依存が3サービスに散在し、仕様変更のたびに修正漏れが起きるコードを、Adapterパターンで整理します。PerlとMooで「変換役を一か所」に集める設計へ。仕組みから丁寧に解説します。
トッピング追加のたびにcostとdescribeの2か所修正が必要になるコードを、Decoratorパターンで整理します。PerlとMooで修正箇所を1クラスに同居させ、既存コードを変えずに追加できる設計へ。仕組みから丁寧に解説します。
通知の生成コードが複数サービスに散在し修正漏れが起きるコードを、Factory Methodパターンで整理します。PerlとMooで生成の判断を呼び出し側から切り離す設計へ。仕組みから丁寧に解説します。
日報生成クラス3種が同じ骨格をコピペで持ち、修正漏れが起きるコードを、Template Methodパターンで整理します。PerlとMooで骨格を親クラスに一本化し、変わる部分だけサブクラスに任せる設計へ。仕組みから丁寧に解説します。
注文ステータスが変わるたびに全ステーションへ手動で通知するコードを、Observerパターンで整理します。PerlとMooで、Subject が通知先を知らなくてよい設計へ。なぜ追加するとき Subject を触らなくて済むのかを仕組みから丁寧に解説します。
複数のbooleanフラグで席を管理し「空席なのに会計待ち」の矛盾に陥るコードを、Stateパターンで整理します。PerlとMooで状態自身に次の遷移を持たせ、ありえない組合せを作れなくする設計へ。仕組みから丁寧に解説します。
巨大なif/elsifに膨らんだ割引計算を、Strategyパターンで『割引ごとの小鍋』に分けます。PerlとMooで、会計の本体を変えずに割引を追加できる設計へ。なぜ条件分岐が整理されるのかを仕組みから丁寧に解説します。
God Classは一つの巨大クラスに全責務を詰め込んだアンチパターン。シリーズ最終回、常連客が11回の夜で学んだ「匂い」で自社コードを診断し、Perl+Mooの委譲パターンで分割する。
Shotgun Surgeryは一つの変更が多数のファイルに波及するアンチパターン。Perl+MooでTaxPolicyクラスに税率を集約し、変更を1箇所に閉じ込める設計を物語形式で解説します。
Speculative Generalityは「将来のため」の過剰な抽象化。MooでYAGNI原則に基づき不要なロール・基底クラスを除去し、シンプルな設計へ回帰する。
Service Locatorは依存関係を隠蔽し、テストを困難にするアンチパターン。Mooのコンストラクタインジェクションで依存を明示し、コード自身が自分の必要なものを語る設計へ。
Law of Demeter(デメテルの法則)とは何か? Perl+Mooのコード例で、メソッドチェーンによる過剰な結合の問題と、handlesによる委譲での解決策を物語形式で解説します。
Temporal Coupling(時間的結合)とは何か? Perl+Mooのコード例で、メソッドの暗黙的な呼び出し順序依存の問題と、Typestateパターンによる解決策を物語形式で解説します。