2010年1月21日 星期四

PureMVC筆記

一.framework基本流程
  1.產生主要mxml,設定檔名為APP NAME
    1.在script內利用 facade.getInstance()取得唯一的facade
    2.在createComplete時執行facade.startup(this)
  2.產生一個ApplicationFacade當主要入口
    1.設定所有在程式內要用來傳遞notication的Command名稱
    2.在initializeController內利用registerCommand
      註冊主要的command,把設定的notication名稱跟對應的
      Command class都寫在這裡
    3.在startup內sendNotification(STARTUP),用來執行
      StartupCommand
  3.StartupCommand
    1.若是extends MacroCommand    
      則override initializeMacroCommand()
      在裡面
      addSubCommand(ModelPrepCommand);
      addSubCommand(ViewPrepCommand);

    2.若是extends SimpleCommand
      則是override execute()
    注意,當使用sendNotification(CommandClass, app);
         將參數送到command內,若是simpleCommand,可以使用
         execut(note)內note.getBody()取讀傳入參數
         若是使用MacroCommand,其initializeMacroCommand()
         並沒有直接接收到note參數,而是initializeMacroCommand()
         內的addSubCommand()所加的Command的execute會取得note物件  
  4.ModelPrepCommand
    override execute()
    在裡面registerProxy 註冊所有的proxy,讓這些proxy
    都可以與整個notification共通
  5.ViewPrepCommand
    override execute
    在裡面registerMediator註冊所有的Mediator,
    或是只註冊一個APPlicationMediator
    再到Application內註冊其他mediator
  6.ApplicationMediator
    在建構子內registerMediator註冊其他的mediator
    當mxml利用startup(this)把自己傳進來時,
    再把this傳給ApplicationMediator時 
    要讓ApplicationMediator使用這個mxml UIComponent
    在傳入this時,this會被判定成mxml檔名的class
    所以一定要import 這個mxml所在路徑

二.各項物件的限制與必要設定
1.mxml        
  定義各項視覺物件,並可對物件觸發事件設定dispatchEvent
  若使用自訂component請在namespace內定義
2.facade
  以public static的方式定義要當作Notication
  傳送的Command名稱        
3.mediator
  1.mediator利用addEventListener與mxml上的物件做直接
    的訊息通知
  2.mediator可以接收並發送notification
    接收來自於command或是proxy的notification
    傳送notification給command
3.command
  1.必要override execute或是initializeMacroCommand
    要做的事放裡面
2.command內可以傳送與接收notification
  傳送給mediator
  接收來自mediator或proxy的notification
3.command內可直接操作proxy
  透過facade.retrieveProxy(ProxyClass.NAME)取得
  proxy實體,再由這實體直接去操作proxy
4.proxy 
  1.proxy只發送不接收notification          

三.mxml上觸發指令,如何跑完整個流程
  例如:要在使用介面上按一個send按鈕上,把登入資料送到server
      驗證取得回傳結果,顯示
  1.在mxml使用介面
    在button上 設定click event去dispatchEvent,
    在對應的mediator上設定addEventListener準備接收
  2.當mediator接收event時,透過viewComponent取得使用者
    輸入的帳號密碼資料,儲存成vo物件
    利用sendNotification把 notification送出去
  3.command在接收到notification時,將取得的vo物件當作參數
    執行proxy的function
  4.proxy與server傳輸驗證取得結果後
    利用sendNotification發出結果
  5.mediator接收到notification時改變外觀顯示 

四.mediator如何接收指令並改變view外觀
  1.mxml與mediator
    由mxml dispatchEvent,在mediator內addEventListener,
    互通訊息

  2.傳送 mediator與command
    mediator sendNotification,command handle notication
  3.傳送 mediator與proxy
    不建議直接溝通
  4.接收 mediator與command
    command sendNotification,mediator handle notication
  5.接收 mediator與proxy
    proxy sendNotification,mediator handle notication

沒有留言: