Catalyst-Plugin-CRUD (1)

これから数回にわけて Catalyst::Plugin::CRUD の紹介をしていきたいと思います。

概要

Catalyst::Plugin::CRUDCatalyst ベースのフレームワーク(もどき)です。データベースを使ってデータを「新規作成・詳細参照・更新・削除・一覧参照」するアプリケーションを劇的な速さで作成することができます。CRUD は create, read, update, delete の略です。弊社の社内で使っているフレームワークのよいところを抜き出し、悪いところを改善させたオープンソースフレームワークで、私がメンテナンスしています。

弊社のフレームワークのよいところは

  • DBDesigner4 でモデルを作成すれば、テンプレート・コントローラ・SQL・言語ファイルを自動で作ってくれます
    • したがって、アジャイルなデータ駆動開発に向いています
  • 国際化を考えて作られています
    • 言語別のメッセージファイル(言語ファイル)を使います

弊社のフレームワークから改善させたところは

  • 複雑になりすぎた親コントローラを超シンプルに書き直しました
  • 親コントローラの継承を委譲にすることでメモリ量を劇的に減らし、起動時間を劇的に短くしました
  • 複雑になりすぎた親ビューをばっさり捨てて Template::Toolkit や ClearSilver を使うようにしました
  • 親モデルはやめてローダーで自動的にモデルを読み込むようにしました(DRY)
  • モデルへの操作を抽象化し、できる限り特定のモデルに依存しないようにしています
    • コントローラごとに使用するモデルを切り替えられるようにしています
  • できる限りビューに依存しないようにしています
    • Template::Toolkit と ClearSilver を両サポートしようと思ったら必然的にそうなります

結果として本当に必要なビジネスロジック部分だけに注力すればすむようになりました。
現在はこのフレームワークを使って段々大きなアプリケーションを作っている最中で、大きなアプリケーションを組むときに足りない機能を随時足していく、ボトムアップ開発をしています。

TODO

  • ポップアップ系に Widget.Dialog を使うようにする
  • Data::FormValidator でエラーチェック
    • xxx_check はやめよう
  • 一覧参照にモデルに依存しないページング機構を組み込む
  • 複合モデル
  • 複合アクション

クラス図

Catalyst::Plugin::CRUD は以下のような構成になっています。

注目してほしいのは、Catalyst::Plugin::CRUD::CDBICatalyst::Plugin::CRUD::DBIC 以外は継承ではなく、委譲を使っている点です。委譲を使うことで、使用するメモリー量を劇的に減らし、起動時間を劇的に短くします。コントローラが数個しかないときは何の問題もないのですが、エンタープライズアプリケーションでコントローラが200個くらいに増えると劇的に違いが出てきます。