読者です 読者をやめる 読者になる 読者になる

Newuserguide意訳 - What is Wicket?

What is Wicket?

WicketはJavaWeb開発フレームワークの数多くの1つであり、そして以前から存在する数多くのフレームワークの上に立つフレームワークです。Wicketコンポーネントベースのフレームワークで、そしてそれは従来のWebプログラミングの単調なプログラミングスタイルと対照的な存在です。他のフレームワークと同様に、WicketはSunのServlet APIの上で作られています。しかし、StrutsあるいはSpring MVC のようなフレームワークと異なり、WicketServletにおけるリクエスト/レスポンスという本来プログラミングの本質でない部分を排除します。従来のフレームワークはユーザからのアクセスを処理する為に、コントローラーを作って、リクエストをとって、レスポンスを返してという作業が必要であり、そしてこれらはステートレスに処理されます。これに対しWicketはステートフルコンポーネントという考えを提供しています。コントローラーあるいはアクションクラスを作る代わりに、ページクラスを作成し、そのページクラス上にコンポーネントを配置し、そしてどのようにそれぞれのコンポーネントがユーザーからの入力に動作するか定義していきます。

これはデスクトップGUI経験で方々であれば非常に親しみやすいものに聞こえるのではないでしょうか?マイクロソフトVisualStudio、SunのSwingとBorlandDelphiコンポーネントのモデルのプログラミングを行う、人気が高いデスクトップGUI開発環境です。コンポーネントを使うことは開発者にコアとなる機能を短時間で実装することをができるようなり、よりアプリケーションで目に見える部分の実装にたくさんの時間を使うことが出来ます。さらに重要なのが、コンポーネントベースGUIプログラミングスタイルが機能拡張にどのような影響をもらすかということです。追加の拡張機能を加えることは、もう1つのコンポーネントを加えるという作業と同等であり、そしてそれらは独立して、あるいはビューで他のコンポーネントとの共同で作業をすることを可能にします。これらの利点は、これまでフレームワークにおいても新しいことではありません。実際、多くの Webフレームワークプロジェクトが生産性とスケーラビリティを改善しようとしてきています。Apache Jakarta's Tapestry、Sunの Java Server FacesマイクロソフトASP.NETはすべてWeb上にコンポーネントベースのスタイルを適用しています。これらすべてのフレームワークはページレイアウトをテンプレートファイルに分離しています。JSFはSunのJSPを使います、ASP.NETASP を使います、そしてTapestryはHTMLを使用したテンプレートシステムです。これらのページはそれぞれのリクエストを受けた時点で、フレームワークの裏側で動作するクラスによってダイナミックにレンダリングされます。これだけ聞くと「テンプレート」は大変すばらしいものに思えます。ただし、これらはテンプレート側ではコンポーネントの定義を行い、クラス側では一連のリスナーメソッドを定義にするという仕組みになる傾向があります。

これは決して悪い仕組みではなく、モデル2コントローラーであるシングルトンクラスで動作していた状態から考えると確実なステップアップです。これらのフレームワークがリスナーメソッドを定義するという仕組みに対しWicketはもっと簡単な仕組みを持っています。また、ステートを意識するない代わりに、私たちはインスタンス変数を持つことができます。しかし、これはWicketJavaコードはページクラス自身がデータを表現していると言っているにすぎません。さらに、このクラスはリクエスト-レスポンスサイクルに意識する必要があるという時もあります。それは getMember()とうメソッドが、すべてのリクエスト情報に基づいて、常にデータベースから新しいデータを取得する必要というような場合です。ときにはこれらの詳細な情報を扱う必要があります、しかしそれは本当にアプリケーションの上位レイヤーにおいて扱われなければなりませんか?WicketJavaのクラスでページを表現することをおもいだしてください。それはOGNLのよりも、HTMLファイルを使ってそれを操るWicketのいっそうクールな特徴です。このページクラスはリクエストの向こう側に存在して、そしてリクエスト/レスポンスサイクルを意識する必要はありません。何かが新しいリクエストを受けたとき、そしてレスポンスを返す瞬間を意識する必要がありますか?O/Rマッパーから取得したがデータソースに格納してあるのか、あるいはユーザーの情報をDBに取得しにいかなければならないのか、または必要なデータをセッションに格納したか、ということを考えた瞬間からあらゆる種類のロジックが突然生じることになります。この問題の解決方法はページをデータというオブジェクトで表現し、リクエストとういう低レベルのロジックを隠蔽することです。それは Wicket が実現しようとしていることです。それが、どんなものかって?まあ、まずはサンプルを触ってみてWicketを楽しんでみてください。

目次へ