目前主流Flex的框架主要有Cairngorm和PureMVC兩種。Cairngorm是adobe自己推廣的框架,感覺Cairngorm只能稱為“architecture pattern”,基本上只是定義了一個(gè)工程分成那幾個(gè)部分以及每個(gè)部分的interface。另外Cairngorm通過Singleton 的ModelLocator來保存數(shù)據(jù),有很多副作用,也決定了不適用用組件開發(fā)。PureMVC基本上解決了Cairngorm存在的大部分問題。
PureMVC的優(yōu)點(diǎn):
(1)結(jié)合了MVC和MVP框架的優(yōu)點(diǎn),實(shí)現(xiàn)很徹底。
(2)基本上可分為Fa?ade、Command、Mediator(components)、Proxy(Value objec)四個(gè)部分,各部分耦合度很低,靈活度非常高(這也是個(gè)缺點(diǎn),下面再談)。
(3)各部分單元測試容易實(shí)施。
(4)View重用容易實(shí)現(xiàn)。
(5)可用于組件、Module開發(fā)。
(6)Proxy的設(shè)計(jì)使得擴(kuò)展和維護(hù)比較容易。
PureMVC的缺點(diǎn):
(1)靈活度過高,要清晰控制一個(gè)事務(wù)過程不容易。
PureMVC自己實(shí)現(xiàn)了Observer Pattern,處理過程變成了訂閱/發(fā)布過程,這樣做法使得靈活性非常好,也使得流程混亂不堪。
它不像早期的Java web 框架webwork(struts)、spring使用集中的XML文件控制流程,也不像敏捷的代表Rails使用契約編程來規(guī)范流程。目前只是在 ApplicationFacade中定義事件名常量,流轉(zhuǎn)過程完全不可見。由于ActionScript還在發(fā)展過程中,其Reflection能力還比較弱,要實(shí)現(xiàn)上述功能還是比較困難。
(2)代碼冗余量高
Mediator、Proxy等繼承類的冗余代碼是比較多的,但是ActionScript不支持Generics以及Reflection能力弱,使得難以消減代碼。
總的來說,PureMVC是不錯(cuò)的框架,待ActionScript語言功能發(fā)展后,還有改進(jìn)的余地。
PureMVC Reference :
(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
(###)