ここではサンプルソースの解説を行います。
サンプルソースはボタンを押したら、「HelloWorld」と文字列が返ってきて、
それが画面に表示されるという簡単なものです。
それらのCairngormのソース構成を
1.controller
2.dataModel
3.service
4.view
と分けて解説していきます。
まず最初のFlexアプリケーションのスタートファイルに当たる「SampleCairngorm.mxml」を見ていきましょう。
※サンプルソースはAIRを用いて作られています。
ですのでスタートタグが「mx:Application」ではなく「mx:WindowedApplication」となっていますが、
振る舞いは変わりません。
サーバサイドのFlexアプリケーションを作成するときはこの「mx:WindowedApplication」を
「mx:Application」に変更してください。
xmlns:ctrl="sample.controller.samplecairngorm.*"
xmlns:srv="sample.service.*"
xmlns:viewhelper="sample.view.samplecairngorm.helper.*"
layout="vertical" viewSourceURL="srcview/index.html"> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・①
<mx:Script>
<![CDATA[
import sample.datamodel.ApplicationDataModel;
// DataModelのインスタンスを取得し、データ表示用にバインドしています。
[Bindable]
private var _model:ApplicationDataModel = ApplicationDataModel.getInstance();
]]>
</mx:Script> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・②
<!--
イベントマッピングをしているControllerクラスをインスタンス化しています。
これをしないとイベントを起こしてもCommandに飛びません。
-->
<ctrl:SamplecairngormController id="appController"/> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・③
<!--
ApplicationServiceをインスタンス化しています。
HttpServiceやRemoteObjectを利用する場合にはこの処理が必要です。
CairngormではServiceLocatorというクラスがHttpServiceやRemoteObjectを
管理しているためです。
このApplicationServiceはその管理クラスといえるでしょう。
ApplicationServiceのソースを見ると開始タグが
「ServiceLocator」となっていることがわかると思います。
-->
<srv:ApplicationService id="appService"/> ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・④
<!--
CairngormでもロジックはできるだけMXMLの中に書かないように、というスタンスが
とられています。
ではロジックをどこに書くのか?
それがこのViewHelperクラスです。
このクラスの中にはUIコンポーネントのイベントをハンドルするためのメソッドをつくり、
そのメソッドを呼び出してイベントを起こすようにします。
-->
<viewhelper:SamplecairngormViewHelper id="sampleViewHelper"/>・・・・・・・・・・・・・・・・・・・・・・・・・・・・・⑤
<mx:Label id="lbl" text="{_model.sampleModel.txtField}" />・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・⑥
<!-- viewhelperクラスのイベントハンドル用メソッドを呼び出しています。 -->
<mx:Button id="btnHelloWorld" label="sayHello" click="{sampleViewHelper.clickBtnHelloWorld(event);}"/> ・・・・・⑦
</mx:WindowedApplication>
①Applicationタグ
このタグは説明するまでもなく、Flexアプリケーションのスタートには必ず必要なタグですね。
このタグの中のプロパティとして注目すべきは以下の点です。
1)xmlns:ctrl="sample.controller.samplecairngorm.*"
Controller層のインスタンス化をするためにこの一文が必要になります。
Controller層については後で解説していきますが、
CairngormのController層はイベントマッピングをするためのもので、
必ずインスタンス化が必要になる
と考えてください。
2)xmlns:srv="sample.service.*"
Service層のインスタンス化をするためにこの一文が必要になります。
Service層ではサーバーとの連携部分を担っており、ここでインスタンス化されたServiceが
Cairngormのソースの中で使いまわされています。
Service層については後で解説していきますので
とりあえず、これもController層と同様に
必ずインスタンス化が必要になる
と考えてください。
3)xmlns:viewhelper="sample.view.samplecairngorm.helper.*"
View層のロジックを肩代わりするための役目をもつ「ViewHelper」というクラスを
インスタンス化するためにこの一文が必要になります。
CairngormではMXMLファイルの中にはできるだけ、「mx:Script」というタグは書かないようにと、
考えられています。
ではScriptタグを書かずにどこにスクリプトを記述していくのか?
その答えがこのViewHelperクラスになります。
View層についても後に解説していきますので、
Controller層、Service層と同様に
必ずインスタンス化が必要になる
と考えてください。
②Scriptタグ
Cairngormでは「ScriptタグはMXMLの中にはできるだけ書かないようにしよう」
という考えのもと、作られたフレームワークですが、
唯一の例外がこの
[Bindable]
private var _model:ApplicationDataModel = ApplicationDataModel.getInstance();
でしょう。
ここではデータモデルのインスタンスを取得しています。
DataModel層については後に解説しますが、
Cairngormの中でいうDataModelというのは
「データバインディングのためにデータを入れるための器」
と考えてください。
ですので、[Bindable]で宣言し、インスタンスを取得しているのです。
またなぜnew演算子ではなくgetInstance()メソッドを利用してインスタンスを取得してるかも、
DataModel層の解説で説明します。
今のところはデータの器をインスタンス化したと考えてください。
③Controllerのインスタンス化
Controller層のControllerをここでインスタンス化しています。
Controllerはイベントとロジックをマッピングしてくれるものです。
よって、このFlexのスタートを示すApplicationタグの中に、
このController層のインスタンス化がされていないと、
イベントが発生しても、ハンドルされません。
つまり、イベントが起きても、プログラムは何もしないことになります。
ですので、Controller層のインスタンス化は必ず必要になります。
④Serviceのインスタンス化
Service層のApplicationServiceというクラスをインスタンス化しています。
ApplicationServiceというのはHTTPServiceタグあるいはRemoteObjectタグを持っただけの
MXMLなのですが、このApplicationServiceというのは
Cairngormの中でServiceLocatorというクラスで管理します。
ここでインスタンス化をしているのは以下の理由からです。
・ServiceLocatorにHTTPServiceまたはRemoteObjectを登録するため
・HTTPServiceあるいはRemoteObjectをCairngormの中で使いまわしていくため
つまり、これもControllerと同様にFlexのスタートを示すApplicationタグの中に、
インスタンス化しないといけないものになります。
⑤ViewHelperのインスタンス化
Cairngormでは「ScriptタグはMXMLの中にはできるだけ書かないようにしよう」
という考えのもと、作られているのですが、
ではScriptがどこに書かれているのか、というと、
ここでインスタンス化しているViewHelperです。
ViewHelperというクラスはMXMLの1つのファイルにつき、1つ以上存在します。
ActionScriptを書かなければならないのですから、当然ですよね。
でも、それならなぜ、普通のClassではなく、ViewHelperなのでしょうか?
これもView層の部分で解説しますが、
CairngormではView層の画面表示部分であるMXMLファイルと
View層のロジック部分であるViewHelperクラスを一元管理しているからです。
ですので、その一元管理をするためにViewHelperクラスを使っているということです。
⑥Labelフィールド
sayHelloボタンを押したときに「Hello」と返ってくる文字列を入れるためのLabelです。
⑦Buttonコンポーネント
sayHelloボタンです。
このボタンを押すことで、「Hello」と文字列が返ってくるわけですが、
このボタンのイベント、「click」に注目してください。
前述⑤にてインスタンス化したViewHelperのクラスのメソッド「clickBtnHelloWorld」を
呼び出していますよね。
こうすることで、MXMLの中のScriptタグにロジックを書くのではなく、
ViewHelperクラスのメソッドにロジックを書いていくことにより、
画面表示であるMXMLとロジック実行の役割を持つViewHelperに分割しているのです。
さて、ここまででFlexのスタートファイルであるApplicationタグをもつMXMLファイルの解説は終わりです。
いくつか「必ずインスタンス化しなければならない」という約束事が出てきましたが、
全体としてタグを並べているだけですので、わかりやすいのではないでしょうか。
最終更新:2008年08月20日 13:51