2010年1月21日 星期四

PureMVC-StateMachine memo

一.基本流程
1.設定一個GlobalStates的檔案
用來把所有StateMachine要用到的Action與State設定在這檔案上
2.Facade
原本會在fcade內設定Notication command Name,並註冊所有的
registerCommand,若使用StateMachine,則只要註冊StartupCommand
即可,也不用宣告Notication command Name
全部動作都搬到InjectFSMCommand內
3.在StartupCommand內
addSubCommand(InjectFSMCommand)
4.InjectFSMCommand
override execute()並在裡面執行
1.registerCommand
原本在fscade上註冊command都搬到這裡
且使用的command名稱都是放在GlobalStates內
2.定義fsm要設定的state xml,
3.var injector:FSMInjector = new FSMInjector( fsm );
injector.inject();
3.當要執行指令時
利用sendNotification(StateMachine.ACTION,null,"ACTION_STATE")
第二個參數是夾帶的data第三個參數是要執行的Action名稱
(名稱都定義在GlobalState內)
4.當有人發出Action的Notifictation時
會去檢查state xml內的架構
在目前所在的state內找到是否有對應的transition action名稱
如果有,就會跳到這個transition target所設定的state上
(此時,state便會轉移)轉移的同時,
也會是執行這state所設定entering的command      


二.運作原理
fsm定義的重點是,系統都會保持在某一個你定義的state狀態下,
譬如說在fsm設定了initial後,如果沒有其他異動,
系統的狀態就是保持在initial所設定的那個狀態

而在state下面定義了在這state下所允許的所有動作
(transition的action name)並定義了這個
transition是要往哪裡去(要跳到哪一個state上)

當有動作被觸發(也就是透過sendNotification發出來)
系統會在目前的state下檢查是否有跟sendNotification
所發出的Action_State相符合的transition action name,
如果有,就會跳到這個transition所設定的target state上
並執行這state上的entering動作  
二.fsm定義    
1. 
initial:設定一開始要進入哪一個state(並會執行那個state的entering command) 
2.
name:定義這個state名稱(這有定義在GlobalStates內)
entering:進入這state時要執行的command(Action Command名稱也設定在) 
exiting:當要離開這個state時,會執行到對應的command
changed:
3.
action:StateMachine.ACTION Notification type的名稱
target:想要轉換的目標state name

沒有留言: