Cairngormフレームワーク解説1

「Cairngormフレームワーク解説1」の編集履歴(バックアップ)一覧に戻る
Cairngormフレームワーク解説1」を以下のとおり復元します。
ここではサンプルソースの解説を行います。
サンプルソースはボタンを押したら、「HelloWorld」と文字列が返ってきて、
それが画面に表示されるという簡単なものです。

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

まず最初のFlexアプリケーションのスタートファイルに当たる「SampleCairngorm.mxml」を見ていきましょう。
&bold(){※サンプルソースはAIRを用いて作られています。}
&bold(){ですのでスタートタグが「mx:Application」ではなく「mx:WindowedApplication」となっていますが、}
&bold(){振る舞いは変わりません。}
&bold(){サーバサイドのFlexアプリケーションを作成するときはこの「mx:WindowedApplication」を}
&bold(){「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層については後で解説していきますが、
    &bold(){CairngormのController層はイベントマッピングをするためのもので、}
    &bold(){必ずインスタンス化が必要になる}
    と考えてください。

  2)xmlns:srv="sample.service.*"
    Service層のインスタンス化をするためにこの一文が必要になります。
    Service層ではサーバーとの連携部分を担っており、ここでインスタンス化されたServiceが
    Cairngormのソースの中で使いまわされています。
    Service層については後で解説していきますので
    とりあえず、これもController層と同様に
    &bold(){必ずインスタンス化が必要になる}
    と考えてください。

  3)xmlns:viewhelper="sample.view.samplecairngorm.helper.*"
    View層のロジックを肩代わりするための役目をもつ「ViewHelper」というクラスを
    インスタンス化するためにこの一文が必要になります。
    CairngormではMXMLファイルの中にはできるだけ、「mx:Script」というタグは書かないようにと、
    考えられています。
    ではScriptタグを書かずにどこにスクリプトを記述していくのか?
    その答えがこのViewHelperクラスになります。
    View層についても後に解説していきますので、
    Controller層、Service層と同様に
    &bold(){必ずインスタンス化が必要になる}
    と考えてください。

②Scriptタグ
  Cairngormでは「ScriptタグはMXMLの中にはできるだけ書かないようにしよう」
  という考えのもと、作られたフレームワークですが、
  唯一の例外がこの
    [Bindable]
    private var _model:ApplicationDataModel = ApplicationDataModel.getInstance();
  でしょう。
  ここではデータモデルのインスタンスを取得しています。
  DataModel層については後に解説しますが、
  Cairngormの中でいうDataModelというのは
  「データバインディングのためにデータを入れるための器」
  と考えてください。
  ですので、[Bindable]で宣言し、インスタンスを取得しているのです。
  またなぜnew演算子ではなくgetInstance()メソッドを利用してインスタンスを取得してるかも、
  DataModel層の解説で説明します。
  今のところはデータの器をインスタンス化したと考えてください。

③Controllerのインスタンス化
  Controller層のControllerをここでインスタンス化します。
  このFlexのスタートを示すApplicationタグの中に、
  このController層のインスタンス化がされていないと、
  イベントが発生しても、ハンドルされません。
  つまり、イベントが起きても、プログラムは何もしないことになります。
  ですので、Controller層のインスタンス化は必ず必要になります。

④Serviceのインスタンス化
  

復元してよろしいですか?

ツールボックス

下から選んでください:

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