Webプレゼンテーションパターン

PoEAAのWebプレゼンテーションパターンの話。MVCパターンのControllerとViewのそれぞれのパターンについて、いくつか紹介されている。

Controllerは、HTTPのリクエストを受けとってURLをパースし、適切なモデルを呼び出してドメインロジックを実行する。その後、適切なビューを呼び出して終わりというライフサイクルを持つ。Strutsで有名なフロントコントローラと、ASP.NETなどで利用されているページコントローラの2つのパターンがあるが、これからのWebアプリケーションはページコントローラがメインになるだろう。ASP.NETに限らず、JSFなどのイベントドリブンな開発を行う場合はページコントローラの相性が良いからだ。その代わり、IDE(e.g. VisualStudio)により、ビューの開発がスムーズに行くような環境がないと、開発はしづらいだろうと思う。逆に、手作業でHTMLを書くようなレベルだと、StrutsのようなJSPベースのフレームワークASP.NETJSFよりも開発しやすいのだと思う。

Viewに関しては、3パターン紹介されている。テンプレートビュー、トランスフォームビュー、ツーステップビューである。テンプレートビューは、JSP,PHPなどに代表されるパターンで、ビューがモデルやペルパーを参照する形でビューを生成する。テンプレートビューは、TomcatIISといったWebコンテナがないとビューの動的コンパイルができないため、テストしにくいという問題がある。トランスフォームビューは、Webコンテナに依存せず、トランスフォーマ(ビューを生成するやつ)がビューを生成するため、テストしやすいというメリットがある。また、雛形となるテンプレートをベースにビューを生成すると、かなり使いやすいものとなる(e.g. Velocity, Smarty)。最後にツーステップビューは、一番論理的にかっこいいパターンである。文字通り、2ステップに分けてビューを生成する。1ステップでは論理ビュー(例えば、PCブラウザ、PDA、携帯に依存しないビュー)を生成し、論理ビューをもとに、端末固有のビューを生成するといったものだ。XSLTを使った実装例が紹介されているが、最終的なHTMLをイメージしにくいことが問題だと思う。小生は、ツーステップビューの2ステップをトランスフォームビューにより実装することで、ちょうどよいビューパターンの実装になるのではないかと考える。