Featured image of post 【目次】Mooを使ってデータエクスポーターを作ってみよう(全10回)

【目次】Mooを使ってデータエクスポーターを作ってみよう(全10回)

PerlのMooを使ってデータエクスポーターを作成するシリーズ記事の目次です。if/elseの問題からStrategyパターンまで、段階的に設計を改善していきます。

@nqounetです。

このシリーズでは、アドレス帳のデータを様々な形式(CSV、JSON、YAMLなど)で出力できる「データエクスポーター」を作っていきます。

最初はシンプルなif/elseによる実装から始めて、その問題点を体験しながら、少しずつ改良を加え、最終的にはStrategyパターンという設計パターンに到達します。

対象読者

  • Perlの基本的な文法を理解している方
  • オブジェクト指向プログラミングに興味がある方
  • デザインパターンを実践的に学びたい方

シリーズ記事一覧

第1回-CSVとJSONでデータを保存しよう

if/elseで形式を切り替えるシンプルな実装から始めます。

第2回-新しい形式を追加すると大変!条件分岐の悩み

YAMLやXML形式を追加したらコードが複雑に…。if/elseが肥大化する問題を体感します。

第3回-出力処理を専用クラスに分けよう

CSV出力を専用クラスに分離して、責務分離の考え方とMooでのクラス設計を学びます。

第4回-Moo::Roleで共通の約束を決めよう

Moo::Roleのrequiresでインターフェースを定義し、統一的なAPI設計を実現します。

第5回-エクスポーターを管理するクラスを作ろう

Contextパターンの考え方でDataExporterクラスを作成し、処理の委譲を学びます。

第6回-実行時に出力形式を切り替えよう

is => 'rw'を活用した動的なオブジェクト切り替えの実装方法を解説します。

第7回-does制約でバグを防ごう

does制約を使った型チェックで、実行時エラーを未然に防ぐ方法を学びます。

第8回-形式名から自動でエクスポーターを選ぼう

Factoryパターン的なアプローチでオブジェクト生成を簡略化します。

第9回-完成!データエクスポーター

全機能を統合したデータエクスポーターの動作確認と、各形式での出力テストを行います。

第10回-これがStrategyパターンだ!

作ってきた設計がGoFデザインパターンの一つであることを明かし、SOLID原則との関係も解説します。

学べること

このシリーズを通じて、以下のことが学べます:

  • Mooの基本的な使い方 - クラス定義、属性(has)、Moo::Role
  • 責務分離 - 1つのクラスは1つのことだけを担当する
  • インターフェース設計 - 共通の約束をRoleで定義する
  • 型チェック - does制約で安全なコードを書く
  • Strategyパターン - GoFデザインパターンの実践的な理解
  • SOLID原則 - 特に開放/閉鎖原則(OCP)の適用

必要なモジュール

  • Moo
  • JSON::PP(コアモジュール)
  • YAML::Tiny
1
cpanm Moo YAML::Tiny

それでは、第1回から始めましょう!

comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。