目前主流Flex的架構主要有Cairngorm和PureMVC兩種。Cairngorm是adobe自己推廣的架構,感覺Cairngorm只能稱為“architecture pattern”,基本上只是定義了一個工程分成那幾個部分以及每個部分的interface。另外Cairngorm通過Singleton 的ModelLocator來儲存資料,有很多副作用,也決定了不適用用組件開發。PureMVC基本上解決了Cairngorm存在的大部分問題。
PureMVC的優點:
(1)結合了MVC和MVP架構的優點,實現很徹底。
(2)基本上可分為Façade、Command、Mediator(components)、Proxy(Value objec)四個部分,各部分耦合度很低,靈活度非常高(這也是個缺點,下面再談)。
(3)各部分單元測試容易實施。
(4)View重用容易實現。
(5)可用於組件、Module開發。
(6)Proxy的設計使得擴充和維護比較容易。
PureMVC的缺點:
(1)靈活度過高,要清晰控制一個事務過程不容易。
PureMVC自己實現了Observer Pattern,處理過程變成了訂閱/發布過程,這樣做法使得靈活性非常好,也使得流程混亂不堪。
它不像早期的Java web 架構webwork(struts)、spring使用集中的XML檔案控制流程程,也不像敏捷的代表Rails使用契約編程來規範流程。目前只是在 ApplicationFacade中定義事件名常量,流轉過程完全不可見。由於ActionScript還在發展過程中,其Reflection能力還比較弱,要實現上述功能還是比較困難。
(2)代碼冗餘量高
Mediator、Proxy等繼承類的冗餘代碼是比較多的,但是ActionScript不支援Generics以及Reflection能力弱,使得難以消減代碼。
總的來說,PureMVC是不錯的架構,待ActionScript語言功能發展後,還有改進的餘地。
PureMVC Reference :
(1) http://puremvc.org/
(2) PureMVC Explorer
(3) Popups in Flex using PureMVC
(4) Understanding PureMVC Pipes
(5) A basic PureMVC MultiCore AS3 example using Pipes Utility and Modules
(6) FCG : a Flex Code Generator