Cairngormサンプル解説(3

「Cairngormサンプル解説(3」の編集履歴(バックアップ)一覧はこちら

Cairngormサンプル解説(3」(2008/08/20 (水) 15:43:57) の最新版変更点

追加された行は緑色になります。

削除された行は赤色になります。

さて、ここではサンプルソースにあるDataModel層について解説します。 といっても、ここはあまり難しくありません。 この層はビジネスロジックの入る余地がなく、 DataModelは単に &bold(){「MXMLにデータバインディングするためのデータの入れ物」} でしか、ないからです。 このあたりもCairngorm特有のものではないでしょうか。 ここではDataModelパッケージにある2つのクラスを見てみましょう。 1) Cairngormで唯一、静的な領域にデータをもつDataModelが このApplicationDataModelです。 package sample.datamodel { import sample.datamodel.samplecairngorm.SamplecairngormDataModel; /** * View層のデータバインディングのためのデータの器であるDataModelクラスです。 */ [Bindable] public class ApplicationDataModel { /** * デフォルトコンストラクタです * ただし、このコンストラクタを利用しての外部からの * インスタンス化は認めてはいけません。 * 「static」で宣言されているgetInstanceメソッドの中でのみ、 * このコンストラクタを呼ぶようにします。 */ public function ApplicationDataModel()                     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・① { _sampleModel = new SamplecairngormDataModel(); } // ここでは「static」な領域に自分のインスタンスを持つようにしています。 // Flexでは基本的にAというMXMLとBというMXMLとの値のやりとりは不可能に近いです。 // これを有効にするために「静的」な領域にデータの器であるDataModelをもつことにより、 // AとBとのやりとりを可能にしています。 private static var _model:ApplicationDataModel; /** * 「static」な領域にある自分のインスタンスを取得します。 * インスタンスがない場合はインスタンス化して、そのインスタンスを返却します。 * @return ApplicationDataModel データバインディングモデル */ public static function getInstance():ApplicationDataModel      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・② { if( _model == null ) { _model = new ApplicationDataModel(); } return _model; } // 画面固有のデータバインディングのためのDataModelクラスを定義しています。 // View層に配置されるMXMLファイルの数に応じて、このDataModelを増やしていくほうが // わかりやすいと思われます。 private var _sampleModel:SamplecairngormDataModel;                               ・・・・・・・・・・・・・・③ public function get sampleModel():SamplecairngormDataModel { return _sampleModel; } public function set sampleModel(model:SamplecairngormDataModel):void { _sampleModel = model; } } } ①コンストラクタ   クラス宣言のところに[Bindable]の宣言が書いてあるので、   このクラスはデータバインディング用のクラスある、と言えるのですが、   このコンストラクタは利用しないようにしてgetIsntace()メソッドを用意しているのが特徴です。   これはCairngormがMXMLとMXMLとの間(あるいはMXMLとActionScriptの間)のデータのやりとりを   基本的に静的なデータ領域にデータをおいて、そのデータの領域を用いてやりとりを行うようにしているからです。   ですので、このコンストラクタを用いて、ApplicationDataModelのインスタンス化を許してしまうと、   静的な領域にDataModelは作成されません。   ③にある画面固有のDataModelのインスタンス化のタイミングがないために、このコンストラクタが記述されていますが、   Cairngormでは使われないコンストラクタになります。 ②public static function getInstance():ApplicationDataModel   ①に述べたように静的な領域にデータを持たせたいがために、   DataModelを使いたいクラスはこのgetInstanceメソッドを用いて、   ApplicationDataModelのインスタンスを取得するようにしています。 ③View層にあるMXML専用のDataModelのプロパティ   サンプルのようにMXMLが1画面しかないような場合には、ApplicationDataModelクラスだけあればよいのですが、   複数の画面になると、ApplicationDataModelクラスひとつでやっていくと、どうしても大きくなってしまいます。   そこで各々のMXML専用にDataModelを作成し、ApplicationDataModelでプロパティとしてもつようにすれば、   少なくとも、ApplicationDataModelが煩雑になるのを防ぐことができます。 2) MXML専用のDataModelです。 今回のサンプルではHelloと返すためにtxtFieldというプロパティしか実装されていませんが、 画面の数が増えればそれだけ、ここにい上げたMXML専用のDataModelが増えていくのではないでしょうか。 package sample.datamodel.samplecairngorm { [Bindable] public class SamplecairngormDataModel { public function SamplecairngormDataModel() { txtField = ""; } public var txtField:String; } } Controller層に比べ、やっていることはデータバインディングのための器でしかないDataModel層。 役割がはっきりしている分、わかりやすいのではないでしょうか。 [[次はService層の解説です。>http://www39.atwiki.jp/flex_framework/pages/25.html]]
さて、ここではサンプルソースにあるDataModel層について解説します。 といっても、ここはあまり難しくありません。 この層はビジネスロジックの入る余地がなく、 DataModelは単に &bold(){「MXMLにデータバインディングするためのデータの入れ物」} でしか、ないからです。 このあたりもCairngorm特有のものではないでしょうか。 以下のように構成されています。 1)ApplicationDataModelクラス 2)画面固有のDataModelクラス ここではDataModelパッケージにある2つのクラスを見てみましょう。 1) Cairngormで唯一、静的な領域にデータをもつDataModelが このApplicationDataModelです。 package sample.datamodel { import sample.datamodel.samplecairngorm.SamplecairngormDataModel; /** * View層のデータバインディングのためのデータの器であるDataModelクラスです。 */ [Bindable] public class ApplicationDataModel { /** * デフォルトコンストラクタです * ただし、このコンストラクタを利用しての外部からの * インスタンス化は認めてはいけません。 * 「static」で宣言されているgetInstanceメソッドの中でのみ、 * このコンストラクタを呼ぶようにします。 */ public function ApplicationDataModel()                     ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・① { _sampleModel = new SamplecairngormDataModel(); } // ここでは「static」な領域に自分のインスタンスを持つようにしています。 // Flexでは基本的にAというMXMLとBというMXMLとの値のやりとりは不可能に近いです。 // これを有効にするために「静的」な領域にデータの器であるDataModelをもつことにより、 // AとBとのやりとりを可能にしています。 private static var _model:ApplicationDataModel; /** * 「static」な領域にある自分のインスタンスを取得します。 * インスタンスがない場合はインスタンス化して、そのインスタンスを返却します。 * @return ApplicationDataModel データバインディングモデル */ public static function getInstance():ApplicationDataModel      ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・② { if( _model == null ) { _model = new ApplicationDataModel(); } return _model; } // 画面固有のデータバインディングのためのDataModelクラスを定義しています。 // View層に配置されるMXMLファイルの数に応じて、このDataModelを増やしていくほうが // わかりやすいと思われます。 private var _sampleModel:SamplecairngormDataModel;                               ・・・・・・・・・・・・・・③ public function get sampleModel():SamplecairngormDataModel { return _sampleModel; } public function set sampleModel(model:SamplecairngormDataModel):void { _sampleModel = model; } } } ①コンストラクタ   クラス宣言のところに[Bindable]の宣言が書いてあるので、   このクラスはデータバインディング用のクラスある、と言えるのですが、   このコンストラクタは利用しないようにしてgetIsntace()メソッドを用意しているのが特徴です。   これはCairngormがMXMLとMXMLとの間(あるいはMXMLとActionScriptの間)のデータのやりとりを   基本的に静的なデータ領域にデータをおいて、そのデータの領域を用いてやりとりを行うようにしているからです。   ですので、このコンストラクタを用いて、ApplicationDataModelのインスタンス化を許してしまうと、   静的な領域にDataModelは作成されません。   ③にある画面固有のDataModelのインスタンス化のタイミングがないために、このコンストラクタが記述されていますが、   Cairngormでは使われないコンストラクタになります。 ②public static function getInstance():ApplicationDataModel   ①に述べたように静的な領域にデータを持たせたいがために、   DataModelを使いたいクラスはこのgetInstanceメソッドを用いて、   ApplicationDataModelのインスタンスを取得するようにしています。 ③View層にあるMXML専用のDataModelのプロパティ   サンプルのようにMXMLが1画面しかないような場合には、ApplicationDataModelクラスだけあればよいのですが、   複数の画面になると、ApplicationDataModelクラスひとつでやっていくと、どうしても大きくなってしまいます。   そこで各々のMXML専用にDataModelを作成し、ApplicationDataModelでプロパティとしてもつようにすれば、   少なくとも、ApplicationDataModelが煩雑になるのを防ぐことができます。 2) MXML専用のDataModelです。 今回のサンプルではHelloと返すためにtxtFieldというプロパティしか実装されていませんが、 画面の数が増えればそれだけ、ここにい上げたMXML専用のDataModelが増えていくのではないでしょうか。 package sample.datamodel.samplecairngorm { [Bindable] public class SamplecairngormDataModel { public function SamplecairngormDataModel() { txtField = ""; } public var txtField:String; } } Controller層に比べ、やっていることはデータバインディングのための器でしかないDataModel層。 役割がはっきりしている分、わかりやすいのではないでしょうか。 [[次はService層の解説です。>http://www39.atwiki.jp/flex_framework/pages/25.html]]

表示オプション

横に並べて表示:
変化行の前後のみ表示:
ツールボックス

下から選んでください:

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