Flex基礎(chǔ) 解析對(duì)AdobeFlex的十大誤解
本文和大家重點(diǎn)討論一下對(duì)AdobeFlex的十大誤解,在Qcon上,Adobe的JamesWard和InfoQ.com一起分享了他推廣傳播Flex應(yīng)用框架過程中所遇到的對(duì)AdobeFlex的十大誤解。
對(duì)AdobeFlex的十大誤解
在Qcon上,Adobe的JamesWard和InfoQ.com一起分享了他推廣傳播Flex應(yīng)用框架過程中所遇到的對(duì)AdobeFlex的十大誤解。
1.為了運(yùn)行Flex應(yīng)用程序用戶需要安裝新東西。
Ward向InfoQ.com獨(dú)家論述了Flash采用比例和Flex編程模型:
Flex2和Flex3必需運(yùn)行在FlashPlayer9上。FlashPlayer9運(yùn)行時(shí)目前已經(jīng)被安裝在世界94%的計(jì)算機(jī)上:http://www.adobe.com/products/player_census/flashplayer/version_penetration.html
Flex2和Flex3的應(yīng)用程序執(zhí)行在FlashPlayer9環(huán)境下。Flex應(yīng)用程序構(gòu)建在本地FlashPlayerAPI之上,如矢量圖形、位圖處理和網(wǎng)絡(luò)(基于瀏覽器網(wǎng)絡(luò)協(xié)議棧)。Flex框架增加了如日期選擇器、數(shù)據(jù)表格、圖表等可重用組件。編譯Flex應(yīng)用程序的結(jié)果產(chǎn)生一個(gè)SWF文件,它是供FlashPlayer使用的二進(jìn)制字節(jié)碼格式。SWF文件包含的是Flex框架代碼和項(xiàng)目自定義代碼的字節(jié)碼。Flex編譯器對(duì)字節(jié)碼進(jìn)行了優(yōu)化,只將要用的類編譯到SWF文件中。
對(duì)于桌面應(yīng)用軟件,Adobe的目標(biāo)是推出自己名為AdobeAIR的新桌面運(yùn)行時(shí),希望能像Web運(yùn)行時(shí)一樣普及。AdobeAIR1.0版本將于2008年初發(fā)布。目前,從labs.adobe.com上可得到的AIR是測(cè)試版。許多公司都已經(jīng)在使用AIR構(gòu)建產(chǎn)品軟件。eBay的應(yīng)用程序eBay桌面就是一個(gè)例子。
2.FlashPlayer是100%私有的。
Ward繼續(xù)為InfoQ.com做出說(shuō)明:
FlashPlayer的核心是Tamarin虛擬機(jī),這是Mozilla旗下的一個(gè)開源項(xiàng)目。而SWF文件格式不是完全開放的,它是由osflash.org社區(qū)備案的。已有很多讀寫SWF文件的開源產(chǎn)品。FlashPlayer產(chǎn)品的發(fā)展方向在很大程度上受該社區(qū)及其需求所影響。FlashPlayer的核心語(yǔ)言是ECMAScript262的一個(gè)實(shí)現(xiàn),ECMAScript262是JavaScript的規(guī)范。Flex還將CSS用于組件/應(yīng)用的樣式。AdobeAIR使用web標(biāo)準(zhǔn)以及開源技術(shù)如Tamarin、Webkit和SQLite作為其桌面應(yīng)用的基礎(chǔ)。
3.Flash是為設(shè)計(jì)者、視頻準(zhǔn)備的,而且讓人討厭。
2007年7月Ward在博客文章“我是如何克服對(duì)Flash的恐懼”中指出:
毋庸置疑的,F(xiàn)lash的能力被濫用了。彈出窗口、跳過介紹和煩人的廣告橫行于我們的屏幕上。我曾聽人們說(shuō)過不應(yīng)該因?yàn)橐粋€(gè)宗教被濫用而否定它。這一格言同樣適用于技術(shù)。FLASH不能因?yàn)橛行┤四盟鼇?lái)做令人討厭的東西而遭到摒棄。畢竟e-mail并沒有因?yàn)槔]件泛濫而消失。
Ward為InfoQ.com詳細(xì)闡述了該主題:
傳統(tǒng)的FLASH是用為設(shè)計(jì)者提供的基于時(shí)間軸的工具構(gòu)建的。Flex是用于構(gòu)建基于Flash的內(nèi)容/應(yīng)用的開發(fā)者工具套件。設(shè)計(jì)者和開發(fā)者通過共享兩個(gè)工具之間的資源能夠攜手合作。Flex增加了一個(gè)全面的組件庫(kù):
http://www.adobe.com/go/flex_explorer_app
http://www.adobe.com/cfusion/exchange/index.cfm?event=productHome&exc=15&loc=en_us
4.Flex不是為企業(yè)/商業(yè)應(yīng)用準(zhǔn)備的。
在過去數(shù)周里,Ward發(fā)布了關(guān)于Oracle在AdobeFlex之上實(shí)現(xiàn)大量新應(yīng)用的七篇系列博客文章。這些應(yīng)用軟件近來(lái)公布在OracleOpenWorld上,其范圍涉及從銷售工具到數(shù)據(jù)庫(kù)管理和商業(yè)智能。
除了Oracle對(duì)Flex的使用,InfoQ.com也公布了一些使用Flex開發(fā)企業(yè)應(yīng)用的團(tuán)體。Ward也為InfoQ.com指出了很多使用AdobeFlex開發(fā)企業(yè)級(jí)應(yīng)用的例子,包括:Workday,SAP,Salesforce和BusinessObjects。
5.Flex太貴。
Ward詳述了Adobe所做的一系列努力來(lái)消除公眾對(duì)價(jià)格的誤解:
Flex是為構(gòu)建Web和桌面的豐富互聯(lián)網(wǎng)應(yīng)用所提供的、免費(fèi)的開發(fā)工具包,并且馬上要開源。免費(fèi)SDK包含了開發(fā)者構(gòu)建RIA應(yīng)用所需的一切,構(gòu)建出的RIA應(yīng)用可在任何瀏覽器或操作系統(tǒng)上同樣工作。免費(fèi)FlexSDK的一部分部分是一套內(nèi)容廣泛的組件集,其可擴(kuò)展、可更換皮膚且可訪問。
你可以在Flex組件資源管理器上看到很多這樣的組件:http://www.adobe.com/devnet/flex/samples/code_explorer/
FlexBuilder是一個(gè)可選的Eclipse插件,這讓使用免費(fèi)FlexSDK開發(fā)應(yīng)用軟件更高效。它包括如集成調(diào)試、設(shè)計(jì)視圖和代碼補(bǔ)全等功能。
最近也采取了不少辦法來(lái)調(diào)整FlexBuilder的價(jià)格。FlexBuilder現(xiàn)正免費(fèi)提供給學(xué)生及教職人員。不帶圖表組件的vanilla版本FlexBuilder,其價(jià)格已降至249美元,以此更好地平衡FlexBuilder的價(jià)格等級(jí)。
還有許多構(gòu)建Flex應(yīng)用后端基礎(chǔ)結(jié)構(gòu)的可選項(xiàng)。為了利用高性能AMF數(shù)據(jù)傳輸協(xié)議,有如LiveCycle數(shù)據(jù)服務(wù)這樣的官方Adobe產(chǎn)品,以及如Granite數(shù)據(jù)服務(wù)這樣的眾多開源項(xiàng)目。使用AMF消除了以下不必要的步驟:從數(shù)據(jù)轉(zhuǎn)換為文本(SOAP,RESTful等),傳送,然后再由文本轉(zhuǎn)換回?cái)?shù)據(jù)。AMF還允許在線傳送中保存類型信息。
關(guān)于AMF和其他基于文本序列化技術(shù)的比較,請(qǐng)看JamesWard的RIA基準(zhǔn)應(yīng)用系統(tǒng)普查:http://www.jamesward.org/census.
6.Flex的應(yīng)用程序需要專用服務(wù)器。
Ward再次為InfoQ.com講述:
Flex應(yīng)用程序可以運(yùn)行在任何Web服務(wù)器,應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之上。Flex應(yīng)用程序更像是客戶端-服務(wù)器應(yīng)用程序。由于邏輯是運(yùn)行在FlashPlayer客戶端內(nèi),你需要某種方式來(lái)與服務(wù)器交互。你可以有很多不同的選擇將Flex連接到你的基礎(chǔ)結(jié)構(gòu)。不需要任何專用庫(kù),你可以將你的后端數(shù)據(jù)和服務(wù)暴露為RESTful、XML或SOAP,并且很容易在你的Flex應(yīng)用中消費(fèi)這些數(shù)據(jù)。如果選擇使用AMF二進(jìn)制序列化協(xié)議,你可能需要添加一些額外的庫(kù)到你的web應(yīng)用軟件。AMF只是另外一種序列化技術(shù),就如XML或JSON一樣,所以它可以作為你用于和后端SOA溝通的多樣方式中的一種。
7.Flex很難學(xué)。
InfoQ.com社區(qū)的LeftieFriele,就InfoQ.com文章”誰(shuí)在使用Flex?”發(fā)表了評(píng)論,詳述了他的公司在學(xué)習(xí)Flex上的經(jīng)驗(yàn):
我們初創(chuàng)公司Ezmo在開創(chuàng)以來(lái)就在使用Flex,我們非常愉快的使用該框架。
不需要任何Flex/Flash的預(yù)備知識(shí),我們可以在少于兩周之內(nèi)構(gòu)建出我們的應(yīng)用程序。Java和Flex之間的整合更是超級(jí)簡(jiǎn)單,開始使用Flex就像是公園漫步。
說(shuō)到工具支持,FlexBuilder也是相當(dāng)不錯(cuò)。如果你熟悉Eclipse環(huán)境,你能順利起飛,不會(huì)碰到任何問題。唯一缺憾是缺少更好的持續(xù)集成工具和更好的Maven插件來(lái)構(gòu)建Flex應(yīng)用。
對(duì)于Flex新手們,Ward給了一段截屏錄像,展示了一個(gè)Flex應(yīng)用的構(gòu)建過程,以幫助你起步。此外,還有許多關(guān)于使用Flex和Java的其他文章在AdobeDeveloperConnection上。
8.使用Flex,我需要重建我的整個(gè)應(yīng)用。
今年1月,BruceEckel發(fā)表了一篇題目為“混合Java”的文章。文章中他認(rèn)為Java團(tuán)體應(yīng)該繼續(xù)使用Java好的方面,但是也應(yīng)該采用其他技術(shù)來(lái)替代Java薄弱的方面。文中主要焦點(diǎn)是使用AdobeFlex作為用戶界面來(lái)取代傳統(tǒng)的Java選項(xiàng)(Swing、JSF等……)
Ward詳細(xì)闡述了這一概念:
既然Flex應(yīng)用程序只是應(yīng)用程序的UI端,而后端通常都是一樣的。如果你的后端是依照SOA模式構(gòu)建的,那么通常很容易將這些服務(wù)暴露給一個(gè)新的FlexUI。這將保持你現(xiàn)有的商業(yè)邏輯不變,無(wú)論它使用的是EJB、Spring服務(wù)還是POJO。
9.Flex打破了常規(guī)的瀏覽習(xí)慣,象后退按鈕。
Ward的博文討論了后退按鈕:
Flex已經(jīng)內(nèi)建了對(duì)后退按鈕的支持且非常容易定制,因此這已不再是問題。Flex也提供了一個(gè)簡(jiǎn)單的辦法來(lái)處理“#”url(或命名的錨點(diǎn)),url隨應(yīng)用狀態(tài)的變化而變化。另一個(gè)Web1.0的整合問題業(yè)已解決。
Ward為InfoQ.com補(bǔ)充了更多的細(xì)節(jié):
Flex3給應(yīng)用提供了一個(gè)簡(jiǎn)單的方式在命名的錨點(diǎn)中儲(chǔ)存狀態(tài)參數(shù),當(dāng)該URL被請(qǐng)求時(shí)可以根據(jù)這些參數(shù)正確地恢復(fù)狀態(tài)。有關(guān)這一特點(diǎn)的更多信息可以參見Flex3特性介紹:深連接專題介紹文檔。
可訪問性對(duì)Flex應(yīng)用來(lái)說(shuō)一直是非常重要。因?yàn)镕lashPlayer與Jaws及其他可訪問性技術(shù)一起工作的,因此為基于Flash的應(yīng)用程序增加可訪問性的能力已經(jīng)具備了。Flex框架將可訪問性納入核心框架。有許多不同方面的可訪問性,這取決于你的應(yīng)用程序需要支持什么樣的損傷和殘疾。你可以在開發(fā)者指南中找到更多有關(guān)Flex可訪問性特性的信息。
10.Flex能做到的,Ajax也能做到。
Ward解釋說(shuō):
FlexRIA和Ajax不是非此即彼的關(guān)系。像GoogleFinance網(wǎng)站就展示了如何同時(shí)使用Flex和Ajax。Ajax非常適合以內(nèi)容為中心的應(yīng)用,而Flex則適合于互動(dòng),媒體和數(shù)據(jù)為中心的應(yīng)用。如果你的應(yīng)用介于這兩者之間,那么你可以用FlexAjaxBridge來(lái)結(jié)合這兩種技術(shù)。在Flex3里,FlexAjaxBridge已經(jīng)直接集成到SDK中。如果使用的Flex2,你將需要單獨(dú)下載FlexAjaxBridge。
此外,InfoQ.com社區(qū)的MichaelMarth講述了他的小組為什么選擇Flex:
我們即將推出的網(wǎng)上約會(huì)站點(diǎn)viibee.com使用的就是Flex2
理由是:付出相同的努力,F(xiàn)lex使我們能夠創(chuàng)建的用戶體驗(yàn)遠(yuǎn)遠(yuǎn)超過我們用Javascript/Ajax所能做到的。
InfoQ.com社區(qū)中是否對(duì)AdobeFlex框架也有這些誤解呢?是否還有其他阻止你使用Flex應(yīng)用框架的阻礙是Adobe尚未解釋的?
【編輯推薦】