Cairngormフレームワーク解説1


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

ここではサンプルソースの解説を行います。
サンプルソースはボタンを押したら、「HelloWorld」と文字列が返ってきて、
それが画面に表示されるという簡単なものです。

それらのCairngormのソース構成を
1.controller
2.dataModel
3.service
4.view
と分けて解説していきます。

まず最初のFlexアプリケーションのスタートファイルに当たる「SampleCairngorm.mxml」を見ていきましょう。
※サンプルソースはAIRを用いて作られています。
ですのでスタートタグが「mx:Application」ではなく「mx:WindowedApplication」となっていますが、
振る舞いは変わりません。
サーバサイドのFlexアプリケーションを作成するときはこの「mx:WindowedApplication」を
「mx:Application」に変更してください。

<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
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ファイルの解説は終わりです。
いくつか「 必ずインスタンス化しなければならない 」という約束事が出てきましたが、
全体としてタグを並べているだけですので、わかりやすいのではないでしょうか。

ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。