PerlのMooを使ってデータエクスポーターを作成するシリーズ記事の目次です。if/elseの問題からStrategyパターンまで、段階的に設計を改善していきます。
実はこれがStrategyパターンだった!作ってきた設計がGoFデザインパターンの一つであることを明かし、SOLID原則との関係も解説します。
いよいよ完成!全機能を統合したデータエクスポーターの動作確認と、各形式での出力テストを行います。
"csv"や"json"の文字列から自動でエクスポーターを選びたい。Factoryパターン的なアプローチでオブジェクト生成を簡略化します。
間違ったオブジェクトを設定してバグが発生…。isaを使った型チェックで、実行時エラーを未然に防ぐ方法を学びます。
実行時にCSV→JSON→YAMLと出力形式を切り替えたい。is => 'rw'を活用した動的なオブジェクト切り替えの実装方法を解説します。
エクスポーターを一元管理するクラスが欲しい。Contextパターンの考え方でDataExporterクラスを作成し、処理の委譲を学びます。
複数のエクスポータークラスに共通ルールを設けたい。Moo::Roleのrequiresでインターフェースを定義し、統一的なAPI設計を実現します。
複雑なif/elseをスッキリさせたい!CSV出力を専用クラスに分離して、責務分離の考え方とMooでのクラス設計を学びます。
YAMLやXML形式も追加したらコードが複雑に…。if/elseが肥大化する問題を体感し、なぜリファクタリングが必要なのかを理解します。
アドレス帳データをCSVやJSONで保存したい。if/elseで形式を切り替えるシンプルな実装から始めて、Mooを使ったデータエクスポーターの基礎を学びます。
PerlとMooでテキストエディタを作りながらCommandパターンを学ぶ全10回のシリーズ記事です。Undo/Redo機能を実装し、デザインパターンの考え方を身につけます。
完成したエディタの設計が、GoFのCommandパターンだったことを明かします。パターンの構造と応用例を解説し、シリーズ全体を振り返ります。
これまで作成したEditor、コマンドクラス、History、MacroCommandを統合し、対話的に操作できるCLIベースの簡易テキストエディタを完成させます。
複数の操作を1つにまとめるMacroCommandクラスを実装します。Compositeパターンを活用し、複数操作の一括実行と一括Undoを実現します。