Flex框架中Cairngorm和Mate的優(yōu)點(diǎn)大比拼
本文和大家重點(diǎn)討論一下Flex框架中Cairngorm和Mate的優(yōu)缺點(diǎn),Cairngorm是一個(gè)廣為人知的老牌Flex框架,而Mate是一個(gè)基于標(biāo)簽的,事件驅(qū)動(dòng)的框架。它們有什么不同點(diǎn)或者相似之處嗎請(qǐng)看下文詳細(xì)介紹。
如何選擇一個(gè)Flex框架
Cairngorm
Cairngorm是一個(gè)廣為人知的老牌Flex框架。它是一個(gè)微型架構(gòu)——由一些設(shè)計(jì)模式組成用來降低團(tuán)隊(duì)協(xié)作的困難。
Cairngorm從Java的世界帶來了很多開發(fā)理念,并且把重點(diǎn)放在三個(gè)關(guān)鍵區(qū)域:處理用戶動(dòng)作,封裝服務(wù)端的交互和業(yè)務(wù)邏輯,管理客戶端的狀態(tài)和界面呈現(xiàn)。
使用Cairngorm來構(gòu)建一個(gè)項(xiàng)目,需要將應(yīng)用代碼分離到不同的包并且繼承Cairngorm的類。以下是Cairngorm項(xiàng)目中一些主要的部分和類。
ModelLocator是一個(gè)儲(chǔ)存數(shù)據(jù)的單例,數(shù)據(jù)表示程序的狀態(tài)。單例類的性質(zhì)保證了程序中的所有組件取得的是相同的數(shù)據(jù)。
ServiceLocator是另一個(gè)單例,它集中管理所有服務(wù)如HTTPServices。同樣,由于是單例,程序中的所有組件取得的是相同的服務(wù)。
業(yè)務(wù)邏輯被封裝在command類中。command實(shí)現(xiàn)了命令模式,它們表示相應(yīng)用戶事件的邏輯。
事件被類FrontController處理,F(xiàn)rontController會(huì)把事件映射到相應(yīng)的Command。
Delegate類作為代理來對(duì)遠(yuǎn)端服務(wù)進(jìn)行請(qǐng)求和響應(yīng)。
優(yōu)點(diǎn)
Cairngorm在Flex社區(qū)廣為人知,作為Adobe開源項(xiàng)目的一員,擁有活躍的社區(qū)和開發(fā)者的支持。
其次,該框架吸取了Java開發(fā)中許多寶貴的經(jīng)驗(yàn),并成功得用于大型項(xiàng)目的開發(fā)中。
并且,Cairngorm適用于團(tuán)隊(duì)開發(fā),因?yàn)樗峁┝私Y(jié)構(gòu)化的開發(fā)方法來創(chuàng)建應(yīng)用,利于分布式的開發(fā)。
缺點(diǎn)
需要寫大量的類應(yīng)該是Cairngorm最多的負(fù)面評(píng)論了。在Cairngorm中,每一個(gè)event對(duì)應(yīng)一個(gè)command;因此,需要對(duì)程序觸發(fā)的每一個(gè)事件來寫一個(gè)command類。而且,還要為command寫一些其他的類,例如delegates。即使是一個(gè)中型的應(yīng)用也會(huì)導(dǎo)致大量的類產(chǎn)生。
其次,Cairngorm實(shí)現(xiàn)了自己的一套事件處理的方法。這增加了Flex內(nèi)置事件模型的復(fù)雜度,而且它還有限制。由于每個(gè)事件都有自己的的command,事件的響應(yīng)者被限制成1個(gè)。加之Cairngorm的事件不具冒泡特性,如果要發(fā)送數(shù)據(jù)到容器的其它層次則需要自己來實(shí)現(xiàn)。
第三個(gè)常見的批評(píng)是Cairngorm依賴全局的單例,這讓模塊和單元測(cè)試變得困難。盡管可以打破單例中的模型簡(jiǎn)化測(cè)試,但是會(huì)增加額外的過程。
資源
Cairngormdeveloperdocumentation
DevelopingFlexRIAswithCairngormmicroarchitecture–Part1:IntroducingCairngorm(StevenWebsterandLeonTanner,August2008)
ExampleCairngormproject
Mate
Mate是一個(gè)基于標(biāo)簽的,事件驅(qū)動(dòng)的Flex框架?;跇?biāo)簽意味著它可以完全實(shí)現(xiàn)在MXML中。該框架的目的是讓事件響應(yīng)者的聲明變得簡(jiǎn)便。
在項(xiàng)目中使用Mate只需要處理兩個(gè)方面:使用1個(gè)或者多個(gè)事件,有一個(gè)成為”eventmap“的MXML文件——被包含在主程序中的一個(gè)MXML文件。它定義了需要監(jiān)聽的事件以及如何被處理。必須有1個(gè)eventmap,而且允許有多個(gè)。
Mate也實(shí)現(xiàn)了依賴注入(Dependencyinjection)的理念——有時(shí)被稱為好萊塢原則,或“don’tcallus,we’llcallyou”。對(duì)象的創(chuàng)建時(shí)這樣一種方式:數(shù)據(jù)被創(chuàng)建并且注入到對(duì)象中。也就是說,對(duì)象不會(huì)喊著要數(shù)據(jù)(”don’tcallus”),而是數(shù)據(jù)被傳送給對(duì)象(”we’llcallyou”)。
優(yōu)點(diǎn)
Mate使用依賴注入提升了松耦合性。因?yàn)榻M件不依賴全局的單例,能更自由地作為對(duì)立的部分。Mate不會(huì)阻止你使用Flex內(nèi)建的事件機(jī)制,也不會(huì)像Cairngorm一樣為每個(gè)事件都使用單獨(dú)的響應(yīng)。Mate的MXML標(biāo)簽文件簡(jiǎn)單易用,而且文檔優(yōu)秀,在官網(wǎng)上有大量的代碼實(shí)例。
缺點(diǎn)
Mate使用MXML文件構(gòu)建,要是作為一個(gè)ActionScript開發(fā)者,就需要調(diào)整自己的習(xí)慣。而且Mate沒有為應(yīng)用程序制定結(jié)構(gòu),這份工作留給了開發(fā)者。
因此,需要加強(qiáng)團(tuán)隊(duì)協(xié)作來保證代碼的兼容性。還有一個(gè)問題與AdobeLiveCycleDataServicesES有關(guān),要知道Mate暫時(shí)還不能處理LiveCycleDataServices提供的數(shù)據(jù)管理方面的功能。
翻譯自:http://www.adobe.com/devnet/flex/articles/flex_framework_02.html
【編輯推薦】