logo

サイト内検索
ココログ最強検索 by 暴想

最近のトラックバック

無料ブログはココログ

« ExtGwtサンプルページのEclipse Project | トップページ | GWT 1.6の環境設定 »

GXT (Ext Gwt)のMVCフレームワーク

以前このブログにアップした、GXTのサンプル・デモ環境「Explore」というアプリケーションはGXTが持っているMVCフレームワークのもとで動いているようです。GXTがこのようなフレームワークを持っていることはこのアプリケーションを見て初めて知りました。ネット上にもこれに関するドキュメントは見当たらないので、ソースを追って概要は見当が付いたのでここで解説します。ただし、この内容はあくまで私がソースを見て推測したものなので正しいかどうかは確証はありません。

何のためのフレームワークか?

一般論としてMVCフレームワークというのはイベントドリブンな処理をどのような役割分担で行うのが良いか、という観点で設計されたもので、ViewからあがったEventをControlerが受けてModelの準備を行い次のViewに制御を渡していくという仕組みを指します。GXTのMVCフレームワークもイベントに対する処理をMVCの役割分担にあわせて処理するためのと考えられます。
ただし、今回の対象の「Explore」というアプリケーションではModelに相当する部分は見つからない、というかはっきりしないので、私が勝手に想像して付け加えたのが下の図です。(青字の部分が勝手に加えたModelの部分)Modelが必要な場合は、ControlerのhandlEventでModelを用意してeventにセットしてViewがそれを表示するというのが良いのではないかと思います。

Gxtmvc_2

この図の例は右側のTabPanelの特定のTabを選択した際に、左側のNavigationパネルのTreeの選択が連動して選択される際の動きを示しています。青字の部分は実際にはありません。順番に追って説明すると以下のようになります。
①ContentViewがTabの選択イベントを拾ってentryに必要なデータを設定した上でTabChnageという識別付きでDispacherのforwardEventを呼ぶ
②DispacherはAppEventのインスタンスを作成し、あらかじめEventの識別ごとに登録されているControlerの中から該当の識別に対応するControlerのhandleEventメソッドを次々に呼んでいく。
③呼ばれたNavigationControlerは自分の保持しているViewとAppEventオブジェクトを引き数にスーパークラスのforwardToViewメソッドを呼ぶ。
④スパークラスControlerは必要であれば引数のViewを初期化してViewのhandleEventを呼ぶ
⑤Viewはeventに応じた表示を行う(この場合は該当のTreeの要素を選択状態にする)
なお、①のforwardEventメソッドは forwardEvent(AppEvent event)という具合にAppEventをあらかじめ作成して渡すことも出来ます。この場合、appEvent.historyEvent=true、appEvent.token=トークン名と設定しておくとGWTのHistoryTokenが記録されます。ブラウザーの戻るや進むボタンで該当のTokenが発生すると、AppEventが復元されて、Tokenに対応した表示を再現することができます。

このフレームワークを使用するメリットは?

まずViewがイベントに対応して表示を変えるようなケースで、イベントの発生元に直接表示側のViewを操作するコードを書いてしまうと、ViewとView(Eventの発生元および表示側)との依存関係が出来てしまいます。逆に言えばこのフレームワークを使用すればお互いのView同士の依存関係が無いままViewからのイベントに別のViewを関連付けることが出来るという事です。この例では、ContentViewとNavigationViewはお互いを知りません。後からViewを追加する場合でも既存のコードに影響しないで済むとも言えます。
また、eventオブジェクトに特定の指定をすることで、HistoryTokenが記録されるので、ブラウザーの戻るや進むボタンにeventを簡単に連動することができる点もメリットと言えます。
ただし、すべてのイベントに関してこのフレームワークを使用する必要は無いと思います。例えば、イベントの対応が発生元のViewの中で明らかに完結しているような場合は通常通り、該当イベントの内部で処理してOKでしょう。
つまり、このフレームワークが有効なのは、
①イベントの発生元とイベントにより表示を変化させるViewが異なる場合。特に、複数のViewがイベントに反応するようなケース。
②イベントをHistoryTokenとして記録したいケース
ということになります。

« ExtGwtサンプルページのEclipse Project | トップページ | GWT 1.6の環境設定 »

GoogoleWebToolKit」カテゴリの記事

GXT (Ext Gwt)」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1482716/39211817

この記事へのトラックバック一覧です: GXT (Ext Gwt)のMVCフレームワーク:

« ExtGwtサンプルページのEclipse Project | トップページ | GWT 1.6の環境設定 »