このドキュメントはMVCフレームワーク「Reffi (RIA Extention Framework Fundamental Implementation)」(Flex版)のAPI仕様書です。
このフレームワークは以下のコンセプトとモチベーションで開発されています。
構成をView(mxml + Action)、Controller、Modelに分けることで、 出来上がる成果物が自然に機能レイヤ分け、パッケージ分けされます。
mxmlの開発、業務ロジックの開発を分離することで、デザイナとプログラマの分業が図れるようになります。
業務ロジックが決められたシステムロジックに沿って処理されることで、
処理フロー設計を省略出来ることを目指しています。
又、決められたメソッドのオーバーライドによる業務ロジックの実装は、
メソッド名の命名等、地味ながらレビュー時コストが掛かる作業を省きます。
ReffiにおいてMVCを構成する要素はBaseAction、BaseController、BaseModelの3クラスから成ります。
各クラスが受け持つ役割と、継承先の業務クラスとの関係は以下のようになります。
|
←制御 |
|
→実行 |
|
||||||
↑継承 | ↑継承 | ↑継承 | ||||||||
|
|
|
具象Modelに関しては、HTTP通信、Pub/Subの機能を実装した機能モデルをReffiパッケージで提供しています。
単純に上記を行うだけであれば、具象モデルを作成する必要は有りません。
Reffiを使ってFlexアプリケーションを構築する場合、以下の手順を踏みます。
題材はアプリケーション起動後、「Hello World Window」という名前のパネルが表示され、
パネル内の「Hello World」ボタンが押下されると、同パネル内のラベルにHello Worldが表示されるものです。
BaseControllerを継承した具象コントローラタグをApplicationの子ノードとして登録します。
(このケースではdemo.client.controllerパッケージのDemoControllerクラスとしています。)
具象コントローラはmx:Applicationに付き一個作成します。
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:controller="demo.client.controller.*" layout="absolute"> <controller:DemoController/> <mx:Panel name="panel" x="10" y="33" width="311" height="239" layout="absolute"> <mx:Button name="panel.btnHelloWorld" x="10" y="10" label="HelloWorld"/> <mx:Label name="panel.lblHelloWorld" x="10" y="40" text="" width="189" height="32"/> </mx:Panel> </mx:Application>この例ではControllerの他、panelという名前のウィンドウ、panel.hwHelloWorldという名前のボタン、 panel.lblHellowWorldという名前のラベルを配置しています。
1で登録記述した具象コントローラを作成します。
BaseControllerを継承したクラスとして作成して下さい。
package demo.client.controller { import jp.co.fujitsu.reffi.client.flex.controller.BaseController; import jp.co.fujitsu.reffi.client.flex.controller.EventBinder; public class DemoController extends BaseController { } }
bindメソッドをオーバーライドして、引数EventBinderに対してイベント登録を行います。
下記例は、1で配置したpanel.btnHelloWorldボタンが押下されると、HelloWorldActionが起動される紐付けを定義しています。
package demo.client.controller { import flash.events.MouseEvent; import jp.co.fujitsu.reffi.client.flex.controller.BaseController; import jp.co.fujitsu.reffi.client.flex.controller.EventBinder; import test.reffi.action.HelloWorldAction; public class DemoController extends BaseController { override protected function bind(eventBinder:EventBinder):void { eventBinder.addEventBinding("panel.btnHelloWorld", MouseEvent.CLICK, Class(HelloWorldAction)); } } }これでエレメント、イベントタイプ、起動アクションの紐付け登録が行われました。
最後に、イベント発生時実際に起動するアクションクラスを作成します。 アクションクラスはBaseActionを継承して作成します。
package test.reffi.action { import jp.co.fujitsu.reffi.client.flex.action.BaseAction; import jp.co.fujitsu.reffi.client.flex.controller.ParameterMapping; import mx.controls.Label; public class HelloWorldAction extends BaseAction { override protected function prepare(parameterMapping:ParameterMapping):Boolean { var lblHelloWorld:Label = getComponentByName("panel.lblHelloWorld") as Label; lblHelloWorld.text = "Hello World!"; return true; } } }prepareメソッドはモデル実行前の前処理や、エレメント操作等のクライアント内で完結する処理等、 汎用的なイベントハンドリングメソッドとして使用出来ます。 以上で一イベントの処理実装は終了です。イベントが増える毎に3~4を繰り返します。