@nqounetです。
会社の業務システムで、月次の売上レポートを自動で作る ReportGenerator を Perl v5.36 と Moo で書き、要望が増えるたびに組み直していく全10回の連載です。週次レポートを足して if/else が肥大化するところから始め、継承とオーバーライドで直し、最後に「作ってきたものは Factory Method パターンだった」と名前を付けます。
各回は前の回のコードを引き継ぐので、第1回から順に読むのが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で選んでください。
どこから読むか
- 第1回 — Moo でクラスを作って
newするところは分かるなら、ここが出発点。レポートを作って返すcreate_reportの土台を書く - 第2回 — if/else でレポートの種類を切り替える書き方に不安があるなら。何が困るのかを、週次を足して確かめる
- 第4回 — 継承で if/else をなくす形から見たいなら。前提は第3回までの、
ReportRoleを適用したMonthlyReportとWeeklyReport - 第10回 — Factory Method パターンの名前と、Strategy パターンとの違いだけ知りたいなら。
ReportGeneratorやcreate_reportがパターンのどの役に当たるかの対応表がある
困りごとから探す
- 第2回 — 新しい種別を足すたびに、既存の
ReportGeneratorを書き換えている - 第3回 — 新しいレポートクラスを書く人が、実装すべきメソッドを忘れてしまう
- 第4回 — 種別の分岐を if/else でなく、クラスの分け方で表したい
- 第6回 — 保存などの共通処理を、サブクラスごとにコピーして書いている
- 第7回 — サブクラスが間違ったオブジェクトを返しても、すぐには気づけない
- 第8回 — 新しい種別を足すとき、既存クラスを直さずに済むか確かめたい
- 第10回 — 継承で作るパターンと、委譲で切り替えるパターンの違いを知りたい
シリーズ概要
月次・週次・日次・四半期のレポートを生成するシステムを作りながら、オブジェクト指向の核になる継承とポリモーフィズムを学びます。最初は単純なクラスで、機能追加によるコードの肥大化(if/else 地獄)を一度体験してから、継承とオーバーライドで直していきます。
対象読者
- Perl入学式を卒業したばかりの方
- 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読んだ方
- if/elseだらけのコードをきれいにしたい方 (Refactoring)
- デザインパターン(特にFactory Method)を学びたい方
目次
第1回 月次レポートを返す ReportGenerator を Moo で書く
第2回 週次を足して create_report が if/else だらけになる
第3回 Moo::Role の requires でレポートの共通ルールを決める
第4回 ジェネレーターを extends で月次と週次に分ける
第5回 create_report をオーバーライドして日次レポートを足す
第6回 生成→表示→保存を基底クラスの generate_and_save にまとめる
第7回 does で create_report の戻り値を検査する
第8回 四半期レポートを既存コードに触れず追加する
第9回 4種類のレポートを作れる完成コードを通して読む
第10回 継承とオーバーライドが Factory Method パターンだったと知る
このシリーズを通して、継承とオーバーライドの実践的な使い方をマスターしましょう!
