2010年1月26日 星期二

還是不要聽到的好

在SV上聽到這首歌
其實感動的眼淚在眼框裡打轉

很簡單的吉他伴奏
像是坐在你身邊彈著吉他 說著話
歌詞裡的一句一句
很熟悉 又很遙遠

那是在好多好多年前,自己還只是個沒離開學校的年紀

曾有過的心情
曾經 想說過的話
在自己曾經很單純的時候

反覆的聽著這首歌
一字一句都像自己
在一個人的夜裡 才敢說出的話


曲名:還是不要聽到的好
歌手:陳修澤
網站:StreetVoice街聲

歌詞:
要用什麼的詞彙來 和你說話呢
要用什麼樣的語氣來 和你聊天
要用什麼樣的表情來 回應你的笑臉
要用什麼樣的動作來 表達我的感覺

希望你可以 看的到我
希望我可以 了解你更多
希望你可以 聽的到我
我唱的這首歌 你能不能聽懂

今天沒有約妳 會不會 見的到面
上次穿過的襯衫 今天 還是別穿好了
經過那個路口 走來的 是不是你
如果真的是你 我該怎麼辦呢

希望你可以 看的到我
希望我可以 了解你更多
希望你可以 聽的到我
我唱的這首歌 你能不能聽懂

希望你沒有 覺得困擾
希望你能夠 繼續笑著生活
希望 我有幫到你 加一點油
希望我可以 在你左右

也許我應該讓這首歌 變的很難聽懂
否則你真的聽到了 會怎麼說
做這首歌只是我 自私的念頭
所以我想
還是不要聽到的好

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

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