Featured image of post Perl と Moo で、月次レポートの生成コードを継承とオーバーライドで組み直して Factory Method パターンにたどり着く全10回【目次】

Perl と Moo で、月次レポートの生成コードを継承とオーバーライドで組み直して Factory Method パターンにたどり着く全10回【目次】

月次レポートを作る ReportGenerator が、週次を足した if/else の肥大化を経て、継承とオーバーライドで組み直され、Factory Method パターンと名前が付くまでの全10回の目次です。第1回から順に読む連載で、どの回で何が変わるかを一覧できます。

@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 パターンだったと知る


このシリーズを通して、継承とオーバーライドの実践的な使い方をマスターしましょう!

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。