4への道

CompositeViewやFilter_Wrapperというものが自然とでてくる流れになってきてますが、これは以前ここにも書いた Chain + DIContainer への道という感じがしてきました。ActionやComponent、最終的にはFilterといったものまで別に特殊なものではなくて、普通にクラスをつくってそれらをつなぎ合わせていくだけというここ最近考えているものに向かっている感じがします。

また、Mapleディレクトリ構成が複雑だと指摘されることがあるのですが、4系は以下のような構成でいくのはどうだろうとふと考えてみました。

  • トップディレクトリは Maple というディレクトリとする(PEARコマンドでインストールして /usr/local/lib/php/Maple/ となる)。このディレクトリ以下は標準添付のComponentやgeneratorを配置する。
    • /usr/local/lib/php/Maple.php で最小DIContainerのセットアップおよびErrorStackの初期化等を行う。(アプリケーションはこれをrequireする)
    • Maple/script/ に generator スクリプトを配置する。
    • Maple/actions/ 以下には maple.ini(maple.yml?)を配置。今までのmodulesと違ってクラスファイルはここには置かない。(ここは基本的に generator 関連の設定ファイルが配置されることになると思う)
    • Maple/components/ 以下に 標準配布となる Action、Component、Filter、Validator、Converter等のクラスをここ以下に配置する。(PEAR準拠にするとここに配置したクラスは Maple_Components_XXXX というクラス名になるのがちょっと気になる・・・)
    • Maple/templates/ 以下にはテンプレートファイルを配置する。(generator関連で使用するテンプレートが配置されると思う)
  • プロジェクトの生成は Maple/script/generator.php のProject Generate機能を使用する。(cd /home/foo; php generator.php project demo というような感じで生成)
    • demo/actions/ 以下は設定ファイルのみ配置する。
    • demo/components/ 以下は使用する全てのクラスファイルをここに配置する。
    • demo/templates/ 以下にはテンプレートファイルを配置する。

整合性とかまだ全く考えてないんですが、こういう感じで標準配布ものはPEARディレクトリのMaple以下に、Project依存なものはproject generatorで生成したディレクトリに配置して、それらを自由に使い分けれるようにするってのがいいかなと。

てな感じで考えているわけですが、なにかコメントがあればお気軽に。

Maple/components/ 以下のクラスしかMapleから使えないのではなくて、Maple4ではPEARディレクトリそのものをMapleのcomponentsディレクトリとして考えていいんじゃないかなと思ってます。一応Maple関係としてオープンにするComponentは、Maple/components/ におかれること念頭につくってね、くらいで PEAR::DB、PEAR::Authといった一般的なものだって別に区別なくComponentとして使うよという感覚です。