PureMVC for AS3

元々Flexエンジニアだったので、PureMVCには以前から興味があったのだが、以前は時間の問題から諦めていた。PureMVCの本家サイトの情報も中々難解で、正直MVCの構造は理解できるのだが、フレームワークとしての定番の記述がよくわからず、具体的に記述でかなり迷っていた。

そこで改めてソースコードを整理してみた。但し、私のプログラムの記述が合っているとは思わないでほしい。

Main.mxml
[java]
<s:WindowedApplication applicationComplete="facade.startup(this)">
<fx:Script>
<![CDATA[
import com.whoocus.flex.ApplicationFacade;
import mx.events.FlexEvent;
// Initialize the PureMVC Facade
private var facade:ApplicationFacade = ApplicationFacade.getInstance();
]]>
</fx:Script>
[/java]

簡単に言うと、ApplicationFacadeのシングルトンクラスを呼び出す。
そのfacadeクラスのstartupメソッドででアプリをMainを登録して初期化処理が始まる。

ApplicationFacade.as
[java]
public class ApplicationFacade extends Facade
{
/**
* シングルトンのインスタンス生成取得メソッド
*/
public static function getInstance( ) : ApplicationFacade
{
if ( instance == null ) instance = new ApplicationFacade();
return instance as ApplicationFacade;
}
/**
* PureMVC アプリケーションのスタートアップメソッド
*/
public function startup( app:Main ):void
{
registerCommand( AppConstants.STARTUP, StartupCommand);
sendNotification( AppConstants.STARTUP, app );
}
}
[/java]

startupメソッドのregisterCommandで、コマンドクラスを登録しsendoNotification通知を送信する。

StartupCommand.as
[java]
public class StartupCommand extends MacroCommand
{
override protected function initializeMacroCommand():void
{
addSubCommand(PrepareControllerCommand);
addSubCommand(PrepareModelCommand);
addSubCommand(PrepareViewCommand);
}
}
[/java]
StartupCommand内では、とりあえずcontroller/model/view の単位で登録するコマンドを小分けしている。

PrepareControllerCommand.as
[java]
public class PrepareControllerCommand extends SimpleCommand
{
/**
* Command登録処理
*/
override public function execute(notification:INotification):void
{
//Command登録処理
facade.registerCommand(AppConstants.HELLO, HelloCommand);
}
}
[/java]

PrepareControllerCommand.as
[java]
public class PrepareModelCommand extends SimpleCommand
{
/**
* Proxy登録処理
*/
override public function execute(notification:INotification):void
{
//Proxy登録処理
facade.registerProxy(helloProxy);
}
}
[/java]

PrepareViewCommand.as
[java]
public class PrepareControllerCommand extends SimpleCommand
{
/**
* Mediator登録処理
*/
override public function execute(notification:INotification):void
{
//Mediator登録処理
facade.registerMediator(new ApplicationMediator(app));
facade.registerMediator(new HelloMediator(app.greeting));
}
}
[/java]

This entry was posted in Flex, PureMVC, 技術情報 and tagged . Bookmark the permalink.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です