SlideShare a Scribd company logo
關於 PureMVC Command 的
       那點事
              Erin Lin
      http://about.me/erinlin
到處都有 Command...
Command 是?
Command 是?
Command 是?
Command 是?
Command
Command       Command


Command
       Command
   Command
         Command
       不想學還是要學的
 Command
         命令 設計模式
 Command         Command
                Command
Command Command
    Command
       Command
<<interface>>
                         ICommand


     Controller         execute():void

   addCommand()
 removeCommand()
//-------------------    Command
   doSomething()

                        execute():void
真情推薦
傻瓜都可以看懂的設計模式入門書
    自己上網去買!




     http://www.oreilly.com.tw/product_java.php?id=a163
回到 PureMVC...
PureMVC
兩個基本必知 Command
最基本的
SimpleCommand
反正要亂搞就是
    extends
SimpleCommand
你認識的第一支繼承 SimpleCommand 寫法
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 傳進來做應用
	   	   }
	   }
}
群組同時執行的
MacroCommand
使用 MacroCommand 的 StartupCommand

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 );
         }
	   }
}
啊...我想要一個命令做完,
    才要執行下一個....
最後還要來個完美的 Ending
  要怎麼辦?
http://trac.puremvc.org/PureMVC_AS3/




                              PureMVC Utilities
                                 使用的時候要心存感激喔!
處理非同步的 AsyncCommand




      http://trac.puremvc.org/Utility_AS3_AsyncCommand
啥叫非同步?
當然就是一件工作做完
  才做下一個指令
 照順序來不懂嗎?
AsyncCommand 也有
 兩個 Class 給你用
AsyncCommand and
AsyncMacroCommand
基本用法是以成組的方式應用
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);
	 	 }
	 }
}
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 );
	 	 }
	 }
}
AsyncCommand
    DEMO
所以 Command 可以做什麼?
應用一:Assets loader
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 處理
	 	 }
	 }
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 );
	 	 }
	 }
}
應用二:做外掛...
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
	   	    }
	   }
}
其他?
其實你要怎樣玩它
   就開心的玩吧!
想太多就什麼都寫不出來了!
最後...
請保持愉快的心情
開心的寫程式吧!
FIN
參考資料


•   http://trac.puremvc.org/PureMVC_AS3/

•   http://www.oreilly.com.tw/product_java.php?id=a163

•   http://trac.puremvc.org/Utility_AS3_AsyncCommand

More Related Content

PPTX
Mochi London 2011
PPTX
Os Practical Assignment 1
PDF
Globals - Node.js : Notes
PDF
Pure Mvc Implementation Idioms And Best Practices Cn
KEY
AS3讀書會(行前準備)
PDF
Pure mvc教程
PPTX
Ria Mvc
PPTX
Staying Connected to UT Arlington
Mochi London 2011
Os Practical Assignment 1
Globals - Node.js : Notes
Pure Mvc Implementation Idioms And Best Practices Cn
AS3讀書會(行前準備)
Pure mvc教程
Ria Mvc
Staying Connected to UT Arlington

Viewers also liked (7)

PDF
Internet in mobilità: scenari, tecnologie ed esigenze dei Consumatori
PPT
Developing for the BlackBerry PlayBook using Flex Builder Burrito
PPT
Lunch and learn as3_frameworks
PPT
Switching perspectives nov10 s sh
PPT
An Opinionated Introduction to Mate
PDF
Architecting ActionScript 3 applications using PureMVC
PDF
User Testing: Adapt to Fit Your Needs
Internet in mobilità: scenari, tecnologie ed esigenze dei Consumatori
Developing for the BlackBerry PlayBook using Flex Builder Burrito
Lunch and learn as3_frameworks
Switching perspectives nov10 s sh
An Opinionated Introduction to Mate
Architecting ActionScript 3 applications using PureMVC
User Testing: Adapt to Fit Your Needs
Ad

Similar to 關於 Puremvc Command 的那點事 (20)

DOCX
Transaction Management Tool
DOCX
Cursor Demo App
PDF
Foomo / Zugspitze Presentation
PDF
Dropwizard and Friends
PPT
Session2-J2ME development-environment
ODP
Appium troubleshooting
PDF
Command pattern vs. MVC: Lean Beans (are made of this)
PPT
The Next Step in AS3 Framework Evolution - FITC Amsterdam 2013
PDF
Presentation Lfoppiano Pycon
PDF
Taking Apache Camel For a Ride
DOCX
Tutorial 8 menu
PPTX
Forcetree.com writing a java program to connect to sfdc
PDF
Will it blend? Java agents and OSGi
PDF
DOSUG Taking Apache Camel For A Ride
PPTX
Robotlegs Extensions
ODP
The Next Step in AS3 Framework Evolution
PDF
Bt j2 me
KEY
Flex Monkey
PPTX
Setting Apple's UI Automation Free with Appium
PDF
Android programming -_pushing_the_limits
Transaction Management Tool
Cursor Demo App
Foomo / Zugspitze Presentation
Dropwizard and Friends
Session2-J2ME development-environment
Appium troubleshooting
Command pattern vs. MVC: Lean Beans (are made of this)
The Next Step in AS3 Framework Evolution - FITC Amsterdam 2013
Presentation Lfoppiano Pycon
Taking Apache Camel For a Ride
Tutorial 8 menu
Forcetree.com writing a java program to connect to sfdc
Will it blend? Java agents and OSGi
DOSUG Taking Apache Camel For A Ride
Robotlegs Extensions
The Next Step in AS3 Framework Evolution
Bt j2 me
Flex Monkey
Setting Apple's UI Automation Free with Appium
Android programming -_pushing_the_limits
Ad

Recently uploaded (20)

PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Machine learning based COVID-19 study performance prediction
PPTX
A Presentation on Artificial Intelligence
PDF
Electronic commerce courselecture one. Pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
MIND Revenue Release Quarter 2 2025 Press Release
PPTX
Machine Learning_overview_presentation.pptx
PDF
Empathic Computing: Creating Shared Understanding
Reach Out and Touch Someone: Haptics and Empathic Computing
Machine learning based COVID-19 study performance prediction
A Presentation on Artificial Intelligence
Electronic commerce courselecture one. Pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
Spectral efficient network and resource selection model in 5G networks
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Dropbox Q2 2025 Financial Results & Investor Presentation
“AI and Expert System Decision Support & Business Intelligence Systems”
Advanced methodologies resolving dimensionality complications for autism neur...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Network Security Unit 5.pdf for BCA BBA.
Building Integrated photovoltaic BIPV_UPV.pdf
20250228 LYD VKU AI Blended-Learning.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
MIND Revenue Release Quarter 2 2025 Press Release
Machine Learning_overview_presentation.pptx
Empathic Computing: Creating Shared Understanding

關於 Puremvc Command 的那點事

  • 1. 關於 PureMVC Command 的 那點事 Erin Lin http://about.me/erinlin
  • 7. Command Command Command Command Command Command Command 不想學還是要學的 Command 命令 設計模式 Command Command Command Command Command Command Command
  • 8. <<interface>> ICommand Controller execute():void addCommand() removeCommand() //------------------- Command doSomething() execute():void
  • 9. 真情推薦 傻瓜都可以看懂的設計模式入門書 自己上網去買! http://www.oreilly.com.tw/product_java.php?id=a163
  • 13. 反正要亂搞就是 extends SimpleCommand
  • 14. 你認識的第一支繼承 SimpleCommand 寫法 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 傳進來做應用 } } }
  • 16. 使用 MacroCommand 的 StartupCommand 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 ); } } }
  • 17. 啊...我想要一個命令做完, 才要執行下一個.... 最後還要來個完美的 Ending 要怎麼辦?
  • 18. http://trac.puremvc.org/PureMVC_AS3/ PureMVC Utilities 使用的時候要心存感激喔!
  • 19. 處理非同步的 AsyncCommand http://trac.puremvc.org/Utility_AS3_AsyncCommand
  • 22. AsyncCommand 也有 兩個 Class 給你用
  • 25. 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); } } }
  • 26. 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 ); } } }
  • 27. AsyncCommand DEMO
  • 30. 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 處理 } }
  • 31. 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 ); } } }
  • 33. 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 } } }
  • 35. 其實你要怎樣玩它 就開心的玩吧! 想太多就什麼都寫不出來了!
  • 38. FIN
  • 39. 參考資料 • http://trac.puremvc.org/PureMVC_AS3/ • http://www.oreilly.com.tw/product_java.php?id=a163 • http://trac.puremvc.org/Utility_AS3_AsyncCommand