Download - 關於 Puremvc Command 的那點事
關於 PureMVC Command 的那點事
Erin Linhttp://about.me/erinlin
2011年5月17日星期二
到處都有 Command...
2011年5月17日星期二
Command 是?
2011年5月17日星期二
Command 是?
2011年5月17日星期二
Command 是?
2011年5月17日星期二
Command 是?
2011年5月17日星期二
不想學還是要學的命令 設計模式
CommandCommand
CommandCommand
Command
Command
Command
CommandCommand
Command
Command
Command
Command
Command
Command
2011年5月17日星期二
<<interface>>ICommand
execute():void
Command
execute():void
Controller
addCommand()removeCommand()//-------------------
doSomething()
2011年5月17日星期二
真情推薦傻瓜都可以看懂的設計模式入門書
自己上網去買!
http://www.oreilly.com.tw/product_java.php?id=a1632011年5月17日星期二
回到 PureMVC...
2011年5月17日星期二
PureMVC兩個基本必知 Command
2011年5月17日星期二
最基本的SimpleCommand
2011年5月17日星期二
反正要亂搞就是extends
SimpleCommand
2011年5月17日星期二
package com.mvc.controls{ import org.puremvc.as3.interfaces.INotification; import org.puremvc.as3.patterns.command.SimpleCommand;
public class StartupCommand extends SimpleCommand { public function StartupCommand() { super(); } override public function execute(notification:INotification):void{ //初始 Application 要做的事情 //facade.registerMediator, facade.registerProxy // or facade.registerCommand //通常都會將 Application 傳進來做應用 } }}
你認識的第一支繼承 SimpleCommand 寫法
2011年5月17日星期二
群組同時執行的MacroCommand
2011年5月17日星期二
package com.mvc.controls{ import org.puremvc.as3.patterns.command.MacroCommand;
public class StartupCommand extends MacroCommand { public function StartupCommand() { super(); } override protected function initializeMacroCommand() :void { addSubCommand( ModelPrepCommand ); addSubCommand( ViewPrepCommand ); addSubCommand( 你寫的Command ); } }}
使用 MacroCommand 的 StartupCommand
2011年5月17日星期二
啊...我想要一個命令做完,才要執行下一個....
最後還要來個完美的 Ending
要怎麼辦?
2011年5月17日星期二
PureMVC Utilities使用的時候要心存感激喔!
http://trac.puremvc.org/PureMVC_AS3/
2011年5月17日星期二
處理非同步的 AsyncCommand
http://trac.puremvc.org/Utility_AS3_AsyncCommand
2011年5月17日星期二
啥叫非同步?
2011年5月17日星期二
當然就是一件工作做完才做下一個指令
照順序來不懂嗎?
2011年5月17日星期二
AsyncCommand 也有兩個 Class 給你用
2011年5月17日星期二
AsyncCommand and AsyncMacroCommand
2011年5月17日星期二
基本用法是以成組的方式應用
2011年5月17日星期二
package controllers{ import flash.utils.setTimeout; import org.puremvc.as3.multicore.interfaces.ICommand; import org.puremvc.as3.multicore.interfaces.INotification; import org.puremvc.as3.multicore.patterns.command.AsyncCommand; public class AsyncCommand0 extends AsyncCommand implements ICommand { public function AsyncCommand0() { super(); } override public function execute(notification:INotification):void{ trace("lalala AsyncCommand0"); setTimeout( commandComplete, 1000); } }}
2011年5月17日星期二
package controllers{ import org.puremvc.as3.multicore.patterns.command.AsyncMacroCommand; public class StartupCommand extends AsyncMacroCommand { public function StartupCommand() { super(); } private function onComplete():void{ trace("end of StartupCommand"); } override protected function initializeAsyncMacroCommand():void{ setOnComplete( onComplete ); addSubCommand( AsyncCommand0 ); addSubCommand( AsyncCommand1 ); addSubCommand( AsyncCommand2 ); } }}
2011年5月17日星期二
AsyncCommandDEMO
2011年5月17日星期二
所以 Command 可以做什麼?
2011年5月17日星期二
應用一:Assets loader
2011年5月17日星期二
package controllers{ import mx.rpc.AsyncToken; import mx.rpc.IResponder; import mx.rpc.http.HTTPService; import org.puremvc.as3.multicore.interfaces.ICommand; import org.puremvc.as3.multicore.interfaces.INotification; import org.puremvc.as3.multicore.patterns.command.AsyncCommand; public class LoadConfigCommand extends AsyncCommand implements IResponder { public function LoadConfigCommand() { super(); } override public function execute(notification:INotification):void{ var service:HTTPService = new HTTPService; service.resultFormat = 'xml'; service.url = "your configuration files url"; service.send(); } public function result( result:Object ):void{ this.commandComplete(); } public function fault( result:Object ):void{ //如果要中斷流程,需要在這邊傳出 ERROR notification 由其他 Command 處理 } }
2011年5月17日星期二
package controllers{ import org.puremvc.as3.multicore.patterns.command.AsyncMacroCommand; public class StartupCommand extends AsyncMacroCommand { public function StartupCommand() { super(); } private function onComplete():void{ trace("end of StartupCommand"); sendNotification( "APP_INIT" ); } override protected function initializeAsyncMacroCommand():void{ this.setOnComplete( onComplete ); addSubCommand( LoadConfigCommand ); addSubCommand( LoadAssetsCommand ); addSubCommand( LoadXXXCommand ); } }}
2011年5月17日星期二
應用二:做外掛...
2011年5月17日星期二
package com.controls{ public class GroupEditorCommand extends SimpleCommand implements ICommand { public function GroupEditorCommand() { super(); } override public function execute(notification:INotification):void { switch( notification.getName() ){ case "GroupEditorCommand.INIT": //將之前開發用的 proxy notification 組織起來 facade.registerCommand( "DataProxy.ITEM_UPDATED" , GroupEditorCommand ); facade.registerCommand( "XXXProxy.NOTIFICATION_NAME" , GroupEditorCommand ); showLoader(); //看你要做什麼起始 break; case "DataProxy.ITEM_UPDATED": //看要叫 proxy 做啥,還是 call 啥畫面出來 break; } } private function clearCommands():void{ facade.removeCommand( "DataProxy.ITEM_UPDATED" ); facade.removeCommand( "XXXProxy.NOTIFICATION_NAME" ); removeLoader(); sendNotification( "GroupEditorCommand.CLOSE" ); } private function showLoader( string:String ):void{ //將檔畫面的 loader call 到前景 } private function removeLoader():void{ //remove loader } }}
2011年5月17日星期二
其他?
2011年5月17日星期二
其實你要怎樣玩它就開心的玩吧!
想太多就什麼都寫不出來了!
2011年5月17日星期二
最後...
2011年5月17日星期二
請保持愉快的心情開心的寫程式吧!
2011年5月17日星期二
FIN
2011年5月17日星期二
參考資料
• http://trac.puremvc.org/PureMVC_AS3/
• http://www.oreilly.com.tw/product_java.php?id=a163
• http://trac.puremvc.org/Utility_AS3_AsyncCommand
2011年5月17日星期二