網頁

2011/08/09

PureMVC重點整理

主要參考資料來源:
學習過程中感謝前輩們的資料,前人種樹、後人乘涼啊~以下為研究PureMVC時都會練習的Best Practices的重點整理,因為老是看了後面會忘記前面,是老了嗎...。

1.概念
  • MVC的代理分別為Proxy、Meditator、Command
    • Model<->Proxy
    • View<->Meditator
    • Controller<->Command
  • Facade and Core。
    • 單態模式Singleton。
    • 主要用來初始化MVC核心
    • 使Proxy、Meditator、Command可以互相拜訪
  • 使用Observer/Notification來實現內部溝通。
    • Facade 保存了Command與Notification間的映射。
    • 發送Notification->執行對應Command
    • Meditator發送、聲明、接收Notification
    • Facade、Proxy只能發送,但不接收Notification
2.Facade
  • Model、View、Controller三者的經紀人。主要訪問通知Proxy、Meditator、Command
  • Facade永不被實例化。應編寫成子類orwgn or 添加重寫Facade。
  • 除了頂層的Application,其它視圖不應該和Facde互動。
  • 使用。直接看Best Practices較清楚。
3.Notification
  • 實現觀察者模式。
  • 發送時可以帶一個「body」參數,可以是任何對向。
  • 另外可帶另一「type」參數,讓接收者作為識別的依據。
  • 可另外自已定義一個Notification。
  • 公用Notification常數名稱通常寫在Facade中。寫成常數避免打錯字的錯誤情況。
4.Command
流程:
  1. Controller 註冊監聽每一個Notification
  2. 事件發生通知
  3. Controller實例化Notification對應的Command
  4. Notification傳送參數給Command,並執行execute
重點:
  • 需要時才被創建,使用後即拋棄。(不要在生命周期長的物件中引用Command對象)
  • 用來協調Model與View
  • SimpleCommand執行單一命令。
  • MacroCommand執行多項命令。使用addCommand添加子Command。
  • 可以任意組合SimpleCommand、MacroCommand。
  • Model應封裝Domin logic、Command處理Business logic

5.Meditator
  • 主要處理View Component派發的事件和其它系統外發出的Notification訊息通知
  • 常將Proxy實例保存於屬性中,避免頻繁獲取Proxy實例。
  • 建構式提供兩個參數name和objec對象,object會將值給予viewComponent(protected)屬性。之後可以使用getter將object轉化成合適的型別。
  • 通常一個Meditator對應一個View Component,若其它包含多個子組件,請封裝Component對外的操作。
  • 接收事件後可能處理情況有:
    • 檢查類型或事件自定內容。
    • 檢查修改View Component屬性。
    • 檢查修改Proxy公布的屬性。
    • 發送一或多個Notifiction給Meditator or Command。
  • 實用小技巧
    • 多個Meditator對同一事件監聽,應發送一個Notification,不同的Meditator做各自的處理。
    • Meditator需要對其它Meditator作互動,最好的方法是用Command將步驟定義在一個地方。
    • 不應該讓一個Meditator去調用其它的Meditator。這是錯的!!
    • Proxy->更新狀態->Notification通知->Meditator反應到視圖。
  • 處理事件的方法:
    • Meditator初始化時會在listNotificationInterests方法中註冊感興趣的事的常數。
    • Meditator接收到感興趣的事件時,會叫用handleNotification方法。
    • 最好將所有的Notification處理方法放在handleNotification,並使用switch/case而不是if/else。
    • 處理的事件應在4、5個之內。太多則意味還Meditator還需要拆分。
    • View依賴Model、Model不應依賴View。
    • 使用Command、Notification來實現View與View的鬆偶合。
6.Proxy
主要用來管理程序數據模型,可能會有下列幾種類型:
  • Remote Proxy
  • Proxy and Delegate
  • Protection Proxy
  • Virtual Proxy
  • Smart Proxy
轉換數據對象
  • 建構式接受一個名稱name與object的參數,Object用來設置Proxy的數據模型,亦可始用setData設置
  • 使用getter將Data Object轉成真正的型別。
  • 不監聽Notification而是發送。
  • 將Domain Logic寫在Model,之後重構才不會使Model層引嚮到View或Controll。
  • 不應該引用、操作Meditator。

2011/07/30

Flash + Flash Builder

使用flash 與 flash builder 建立應用程式的方法,試用了一下,感覺還滿方便的,可以在Flash與Flash Builder間自由切換,debug也很方便,推一下。




另外在這段影片是簡單介紹如果在flash建立好元件後,在放到flash builder,很神奇的將兩者結合在一起。

2011/06/16

Learn Object-C

呼,好久沒有更新網誌了,原因之一就是被抓去寫Object-C,從一開始的不熟悉到現在知道大概怎麼做花了約三個月的時間,真是漫長,手上的案子預計月底應該可以上架了,接下來有時間應該會寫一些學習Object-C的心得~(O.S之前說好的Flash OOP系列咧...Orz),三個月期間其實一直在學別人的程式的code,為了怕忘記,將學習到的東西整理到了Google Doc,有興趣的人可以參考一下,內容會不定時更新。

ps.
今天參加了CocoaHeads Taipei的網聚,遇到許多高手,有種世界真大的fu...。消息好像都會在CoCoaHeads.tw論壇發佈。

2011/03/09

菜鳥的PureMVC筆記(1)

最近參加了Flash/Flex/AS精武讀書會,聽完高手們的分析解釋外加自已努力鑽研,結論是PureMVC真是難以下嚥,快吐血身亡了…Orz,看了許多次才能大致了解它的框架各個部分是在做什麼的,若沒有學過設計模式(Design Pattern)很難捉到PureMVC的精神。基於我是PureMVC菜鳥要有菜鳥勉強的方法,因此構想出在學習PureMVC前預先要了解的知識清單。

1.了解什麼是設計模式?
2.與PureMVC相關的設計模式?
  • Singleton Pattern 單態模式
  • Observer Pattern 觀察者模式
  • Composite Pattern 組合模式
  • Facade Pattern 外觀模式
  • Mediator Pattern 仲介者模式
  • Command Pattern 命令模式
  • Proxy Pattern 代理人模式
3.其它不能不知道的設計模式。
  • Strategy Pattern 策略模式
  • Factory Method Pattern 策略模式
  • State Pattern 策略模式
3.MVC(Model-View-Controller)複合模式
4.開始學習PureMVC---> 還不是很熟目前沒有要寫,熟一點在來搞,所以標題是大誤 ~ XD

以下列出我學習設計模式時參考的書籍:
深入淺出設計模式 
深入淺出設計模式 (Head First Design Patterns)
 雖然這本書是用Java來做例子,但整本書淺顯易懂,是我學設計模式買的第一本書。

物件導向設計模式 
物件導向設計模式 Design Patterns 由GoF四人幫所撰寫,是學習設計模式的聖經。

ActionScript 3.0 Design Patterns
 ActionScript 3.0 Design Patterns 我比較喜歡這本,因為是用ActionScript3.0實作Design Pattern比較容易上手測試程式碼。



continue soon...{(It's too late)? go bed:continue}

2011/03/04

My Log Message

前幾天在找資料時,看到這一篇官方說明文件「基準測試」的文章,裡頭用到滿多偵測效能或是as開發時debug的工具,裡頭有一個修件編譯的功能讓我滿好奇的,可以在Complier時選擇是程式碼是否要編譯,上網查了資料,相當感謝奶綠茶所寫的的這一篇文章「使用condition compiling」才能快速了解它的使用方法和找到相關的資源,於是便想到寫一個小trace工具(Log),我希望它能夠有顏色辨識的功能並且能設定字型的大小,所以是用textHTML來設定文字,縮排的話可以使用「\t」的方式來解決,這樣應該就可以滿足大部分的需求,另外希望可以一開始時畫面上不會顯示這個物件而是按Ctrl+Shift+L來切換Log的visible屬性,Log也可以隨視窗大小而改變。另外我只有定義CONFIG::debug,true,而沒有定義CONFIG::realease,false,主要是因為發佈時把CONFIG::debug,true改成false就可以不用在編議log的程式碼了。

雖然目前可以直接使用滑鼠滾輪直接捲動文字,但想接下來也許可以製作拉吧之類的功能,設定文字也可以設較多樣性的方法來顯示。


使用方法:
var tracer:Log = Log.getInstance();
stage.addChild(tracer);
tracer.setMessageByHTML("test1", 12, "#00ff00");
tracer.setMessageByHTML("\ttest2", 13, "#ff0000");
tracer.setMessageByHTML("test3", 14, "#0000ff");


搞定來睡,版面有點醜想換一個 = =