月次レポートを生成するReportGeneratorクラスを作成します。Mooを使ったオブジェクト生成の基本を学び、シリーズの土台となるコードを書いていきましょう。
架空ECサイト「ペルマート」の決済審査システムを題材に、Chain of Responsibilityパターンを段階的に学ぶシリーズの目次ページです。Perl 5.36とMooで実装します。
各審査ロジックを独立したMooクラスに分割し、Chain of Responsibilityパターンでチェーン構築。拡張性の高い決済審査システムを完成させます。
決済審査に新ルール追加でif文がネスト化。ブラックリスト、残高確認、不正検知など条件が増えると保守困難に。リファクタリングの必要性を体験します。
Perl 5.36で架空ECサイト「ペルマート」の決済審査を実装します。金額上限チェックと有効期限検証をif文で構築。Moo OOPシリーズ卒業者向けの実践編です。
Stateパターンを自然に学べるシリーズ。自動販売機の動作をPerlで再現しながら、if/elseの限界を体験し、状態ごとにクラスを分離する設計に辿り着きます。
実はこれがStateパターンだった!作ってきた設計がGoFデザインパターンの一つであることを明かし、Strategyパターンとの違いも解説。
いよいよ完成!全機能を統合した自動販売機シミュレーター。対話的なCLIで動作確認しながら、これまでの学習を振り返ります。
新しい「売り切れ状態」を追加!既存クラスを変更せずに機能拡張できるOCP(開放閉鎖原則)の威力を体感します。
間違ったオブジェクトが状態として設定されるバグを防ぎたい。does制約を使った型チェックで実行時エラーを未然に防ぐ方法を解説。
状態自身が次の状態へ遷移する仕組みを実装!StateがContextへの参照を受け取り、自ら状態を切り替える設計を学びます。
状態を一元管理するContextクラスを作成。VendingMachineクラスがStateへ処理を委譲する仕組みをMooで実装します。
複数のStateクラスに共通ルールを設けたい。Moo::Roleのrequiresでインターフェースを定義し、統一的なAPI設計を実現します。
肥大化したif/elseをスッキリさせたい!状態ごとにクラスを分離して、単一責任の原則を実践。MooでStateクラスを作成します。
「払い出し中」「売り切れ」を追加したらコードが複雑に…。if/elseの肥大化問題を体感し、リファクタリングの必要性を理解します。