Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-04-23

モデルを拡張していくための仕組み

モデルを拡張していくための仕組み - dann@catalyst を含むブックマーク はてなブックマーク - モデルを拡張していくための仕組み - dann@catalyst モデルを拡張していくための仕組み - dann@catalyst のブックマークコメント

モデルを切り離すことの意味として、

  • Testabilityを高めるため
  • Webのコンテキスト以外の再利用ができるようになる

と書いたのだけれど、モデルを切り離したいというのは、それだけが理由ではなかったりします。

モデルを切り離した後には、もう少し先があるんじゃないかなぁと思っていて、スライドの付録に書いていました。WAFとは独立させて、POPOのモデルだけを拡張していけるための仕組みがあったら、モデルを資産として残せる(これは幻想かもしれませんが)、もしくはモデルの後からの拡張が容易になるんじゃないかなぁと思っていました。

拡張する方向としては、以下の二つがあるかなぁと思いました。

  • プラガブルにモデルの機能を追加する仕組み
  • モデルから横断的な関心毎を切り離して、任意の箇所に適用する仕組み

POPOに上記の二つの拡張する仕組みを提供できると、Webの世界と切り離して、モデルだけを育てる仕組みができ、モデルを資産として残していける部分ができるんじゃないかなぁと思っていました。そうでなくても、拡張性の高いモデルを作れる可能性がありそうです。

1つ目。モデルをプラガブルに拡張するための仕組み。id:YappoさんのClass::Component。これはいかにもLLらしい面白いコンポーネントだなぁって思ってます。これはいかにもPerlっぽくて、絶対Javaの世界にはない話なんですよね。モデルをプラガブルに拡張するための仕組みがあれば、モデルを資産として残せる部分もでてきそうです。

2つ目。Javaな世界では、Caching、Transaction、Loggingなど、モデルの横断的な関心毎を切り離して、モデルの外からコードを付与してやる仕組みが流行りました(実際成功したのは、Transaction、Loggingくらいなわけですが。)Transactionなどが、POPOのコードから消えるので、POPOそのもののTestabilityが高くなるわけです。これはこれで価値がありますね。

Class::Component, Moose, (Class::MOP)は上記を実現できる可能性のある面白いライブラリだなぁと思っていて、とても注目しています。

BaysideBayside2008/04/24 12:30すごく同感です。Java の struts と PHP の Zend Framework に明示的なモデルがないのは、フレームワークは VC だけ用意しておけばOKということなのかもしれませんね。

danndann2008/04/24 22:57仮にWAFがMを提供するにしても、WAFにMが依存しない形でもMを使えるような形でも提供するべきだろうなぁとは思います。要するに、WAFのM --> POPOのM という感じで。