軟件開發(fā)經(jīng)常是一個(gè)不斷折衷考慮的過程。目前最熱的爭論焦點(diǎn)是富有效率的應(yīng)用程序與基于瀏覽器的UI之間的權(quán)衡。不管當(dāng)前的媒體報(bào)道會導(dǎo)致人們什么樣的想法,業(yè)界還沒有決定為了支持用HTML/XML/XSLT/Javascript表達(dá)的基于瀏覽器的UI而拋棄所有的桌面程序。其理由可以總結(jié)成四個(gè)字:“用戶體驗(yàn)”?!靶问阶裱δ堋笔桥袛嗫捎眯缘年P(guān)鍵標(biāo)準(zhǔn)。實(shí)際中,較高的用戶交互性或復(fù)雜的數(shù)據(jù)關(guān)系使選擇的可能性更小,也更多的要求將用戶接口以桌面程序的形式提供。
在當(dāng)今的計(jì)算環(huán)境中,提供在多種平臺上運(yùn)行的用戶接口是非常重要的。平臺范圍要寬,包括小型手持設(shè)備和服務(wù)器控制臺。當(dāng)用戶與他們非常熟悉的視窗管理環(huán)境中的程序進(jìn)行交互時(shí),操作必須讓人感覺自然,并且具有可預(yù)測性。
為了創(chuàng)建高效率的應(yīng)用程序,首先要求有良好的設(shè)計(jì)和支撐性架構(gòu)。由于沒有能被廣泛接受的應(yīng)用程序框架,大多數(shù)開發(fā)人員會開發(fā)自己的架構(gòu),然后自己組成框架。然而,這種方法的成本相當(dāng)高,解決問題所花的時(shí)間、調(diào)試努力、支持和麻煩還只是建立目標(biāo)程序功能的一些外圍性開銷。
已經(jīng)有比“開發(fā)自己的”程序框架更好的方法,這種方法在滿足設(shè)計(jì)要求的同時(shí)可以簡化和加速項(xiàng)目開發(fā)。這種框架的“希望列表”可包含以下多個(gè)方面:
.實(shí)現(xiàn)清晰、一致和內(nèi)斂性的架構(gòu);
.支持包括Windows、Mac OS X、Linux、QNX Photon、Pocket PC、HP-UX、AIX、Solaris在內(nèi)的所有主要桌面平臺上的開發(fā)和執(zhí)行;
.“快速”保持平臺本地外觀和感覺的UI響應(yīng);
.提供包括標(biāo)準(zhǔn)組件(如按鈕、檢查框)和擴(kuò)展組件(如工具條、樹狀瀏覽、進(jìn)程測量)在內(nèi)的各種窗口組件;
.提供包括編輯器、位置/修改管理、基于規(guī)則的風(fēng)格、內(nèi)容完成、格式化、搜索和強(qiáng)大幫助在內(nèi)的各種擴(kuò)展文本處理方式;
.必要時(shí)支持特殊平臺性能(如ActiveX)和傳統(tǒng)軟件的使用;
.為程序設(shè)計(jì)產(chǎn)品品牌;
.包含一體化幫助系統(tǒng);
.管理用戶配置和參數(shù);
.支持程序更新的遠(yuǎn)程發(fā)現(xiàn)和安裝;
.讓在創(chuàng)建面向?qū)ο蟮目蚣芊矫嬗胸S富經(jīng)驗(yàn)的著名軟件公司進(jìn)行創(chuàng)建和維護(hù);
.支持國際和國內(nèi)語言的互譯;
.針對靈活性進(jìn)行設(shè)計(jì),可隨意增加新的功能;
.只為需要的東西“支付”-基礎(chǔ)架構(gòu)可隨意精簡或擴(kuò)展,以便針對精確要求進(jìn)行功能裁剪。
只要完成我們的“希望列表”,就可能增加得到多個(gè)工業(yè)慈善機(jī)構(gòu)使用和支持的、開放源代碼團(tuán)隊(duì)創(chuàng)建和維護(hù)并且免版稅和許可的技術(shù),并可向全球重新發(fā)布。雖然這些要求聽起來象是白日夢,但Java程序開發(fā)人員可能已經(jīng)安裝了這種令人難以置信的程序框架。這就是Eclipse。

圖1:基于“空的”Eclipse的應(yīng)用程序
但Eclipse難道不是Java IDE嗎?簡短的回答是“是”和“否”。Eclipse項(xiàng)目的常見問題(FAQ)包含以下內(nèi)容:“Eclipse是一個(gè)開放源代碼軟件開發(fā)項(xiàng)目,專門為高集成度工具的開發(fā)提供全功能、商業(yè)級質(zhì)量并極具魯棒性的工業(yè)平臺?!币虼烁鶕?jù)上述定義,Eclipse是一種用于工具集成的開放平臺,不是IDE。之所以讓人疑惑是因?yàn)樵贓clipse平臺中有一個(gè)完整的工業(yè)性Java IDE,它作為一種插件擴(kuò)展了Eclipse的基礎(chǔ)框架結(jié)構(gòu)。
Eclipse框架可以將多個(gè)獨(dú)立的工具集成進(jìn)單個(gè)一體化程序中,并提供無縫用戶接口。新工具通過插件的形式集成進(jìn)Eclipse平臺和用戶接口,從而擴(kuò)展了Eclipse的內(nèi)容,并向用戶提供新的功能。另外,Eclipse插件還可以擴(kuò)展其它插件?;贓clipse的程序初始化時(shí)可以發(fā)現(xiàn)和激活環(huán)境中已經(jīng)配置的所有插件。由于Eclipse程序能夠執(zhí)行通過目前包含的插件增加進(jìn)的任何功能,因此Eclipse程序非常象是各組件的疊加。
由于能夠?qū)懞蜏y試這樣的插件對Eclipse成功與否起著舉足輕重的作用,因此Eclipse平臺捆綁了插件開發(fā)環(huán)境(PDE)和整套Java開發(fā)工具(JDT)。Eclipse開發(fā)人員對他們開發(fā)的框架能力充滿信心。整個(gè)開發(fā)環(huán)境就是使用標(biāo)準(zhǔn)插件技術(shù)集成進(jìn)平臺中的另外一套工具。Eclipse平臺本身就是開發(fā)人員利用基于Eclipse的Java IDE(最初是beta版)自己開發(fā)出來的。由于采用了開放源代碼的形式,因此任何人都可以檢查代碼,并非常詳細(xì)地了解框架將被如何使用。
正是將開發(fā)工具與平臺捆綁在了一起,使得有些人對Eclipse的特性抱有困惑。JDT組件的高效性吸引了所有Java開發(fā)人員,而不僅那些編寫插件的人。表面上,Eclipse似乎只是一種優(yōu)秀的Java IDE。但不該認(rèn)為Eclipse只是Java IDE,而是應(yīng)該把它看作是一種剛好包含了Java IDE的實(shí)用性程序,是將Eclipse基礎(chǔ)平臺用作程序框架搭建起來的一種程序。
Eclipse框架特性概述
Eclipse采用了可擴(kuò)展的設(shè)計(jì),作為一種架構(gòu)平臺實(shí)現(xiàn)了最大的靈活性。在它的內(nèi)核,Eclipse平臺包含了OSGi R4內(nèi)核框架規(guī)范的高效實(shí)現(xiàn)。這種框架規(guī)范名為Equinox,可用來引導(dǎo)程序。在該框架上面,Eclipse架構(gòu)定義了一套層次化子系統(tǒng),可用作根本就不是IDE的便攜式程序(或套件)的框架。由于這種分層架構(gòu)只在個(gè)別的架構(gòu)接口處進(jìn)行耦合,程序創(chuàng)建時(shí)可以只整合需要的框架,同時(shí)刪除那些不需要的框架。
下面介紹Eclipse的一些主要特點(diǎn)。正是這些特點(diǎn)使得作為一種通用程序框架的Eclipse廣受人們歡迎。
可擴(kuò)展模型:因?yàn)橐笠恢痹谧兓?,開發(fā)人員通常要花很大的力氣設(shè)計(jì)出靈活、可擴(kuò)展的程序。由于Eclipse采用了高度靈活和可擴(kuò)展的插件模型,因此可以在平臺中增加任何類型的功能。如果程序可以被認(rèn)為是一個(gè)工具或一套工具,那么它的功能很快就能以組件的形式增加進(jìn)基于Eclipse的框架中,就象Eclipse本身具有的Java IDE功能那樣。
內(nèi)容模型:Eclipse提供的內(nèi)容模型以用于安裝工具(功能)的工作臺概念為基礎(chǔ)。 工具所需的資源在工作區(qū)內(nèi)被組織成項(xiàng)目。項(xiàng)目包含樹狀結(jié)構(gòu)的資源,這些資源就是包含任何類型內(nèi)容的文件夾和文件。內(nèi)核平臺提供大量擴(kuò)充點(diǎn),允許定制全方位的資源壽命期管理。
內(nèi)容模型的層次化分類特性使得它適用于多種類型的實(shí)用性程序。例如,可以在包含了與用戶email賬號相關(guān)的單一項(xiàng)目的工作區(qū)上創(chuàng)建簡單的email客戶端。用戶項(xiàng)目可包含用于收件箱、發(fā)件箱和已發(fā)送郵件等公共功能型email單元的文件夾。每個(gè)文件夾可包含作為項(xiàng)目資源的相應(yīng)email消息。
本地窗口組件:Eclipse平臺包含一個(gè)標(biāo)準(zhǔn)窗口工具套件(SWT)。SWT是在所有支持的Eclipse平臺上本地化實(shí)現(xiàn)的。SWT包含大量的事件、版圖管理器和窗口組件。當(dāng)某個(gè)支持的平臺不包含Eclipse支持的本地窗口時(shí),比如Motif上的工具條,可提供針對該平臺的模擬窗口。SWT還與本地的一些桌面功能(如拖放)發(fā)生交互。另外,如果某些功能比全平臺便攜性更理想,SWT也可以使用這些特殊OS組件,如Windows Active/X控制。到目前為止,SWT已經(jīng)在Windows Win32和PocketPC、Photo、Motif和GNU窗口管理器上得到了驗(yàn)證,覆蓋了從高端工作站到嵌入式設(shè)備的各種應(yīng)用平臺。
雖然Java語言已經(jīng)包含了兩個(gè)窗口工具套件AWT和Swing,Eclipse小組仍選擇實(shí)現(xiàn)他們自己的套件。詳細(xì)理由可見Eclipse概論白皮書。然而,為了證明這是正確的決定,全部要做的只是比較你選擇的Swing或AWT程序的外觀與感受與Eclipse的外觀與感受。Eclipse的外觀、感受和響應(yīng)就象它在無論什么平臺上運(yùn)行的本地程序一樣。
用戶接口框架:為了建立圖形界面,SWT可以直接或通過JFace使用Eclipse平臺的用戶接口框架。JFace包括對話框、參數(shù)選項(xiàng)、進(jìn)度報(bào)告、框架向?qū)б约皥D像與字體注冊等內(nèi)容,因此用戶接口的創(chuàng)建非常直截了當(dāng)。
Eclipse平臺支持多窗口、類似MDI的用戶接口描述。在JFace和SWT的頂部,Eclipse工作臺提供的框架可用于建立透視圖、編輯器和瀏覽窗口,從而實(shí)現(xiàn)與用戶的交互。編輯器處理資源壽命期的交互,如創(chuàng)建、編輯、保存和刪除。瀏覽窗口用于提供與用戶正在交互的對象有關(guān)的補(bǔ)充信息。例如外形、掛起的任務(wù)和私有窗口等。透視圖是瀏覽窗和編輯器的堆疊、平鋪或分離排列。在某一時(shí)間窗口中只有一個(gè)透視圖是可見的,但通過打開多個(gè)窗口即可同時(shí)瀏覽多個(gè)透視圖。
Eclipse用戶接口框架具有可擴(kuò)展、靈活和強(qiáng)大的功能。即使它沒有做你需要的所有事情,它也可以非常方便地得到擴(kuò)展,所花的時(shí)間和資源要比設(shè)計(jì)和創(chuàng)建你自己的框架少得多。
更新管理器:過去,與程序相關(guān)的最大問題是當(dāng)新版本發(fā)布時(shí)包裝、分發(fā)、維護(hù)和更新程序所發(fā)生的支持成本。當(dāng)一個(gè)大而分散的用戶團(tuán)體使用程序時(shí)會增加這種成本。隨著產(chǎn)品的成功和普及,售后支持將變得既耗時(shí)又昂貴。
組件維護(hù)和更新功能是從頭開始的Eclipse設(shè)計(jì)的一部分。為了控制上升的成本,排除可能妨礙項(xiàng)目開發(fā)和部署的維護(hù)問題,Eclipse平臺包含靈活的更新管理器。更新管理器經(jīng)過配置既可執(zhí)行新組件的初始安裝,也可以從遠(yuǎn)端服務(wù)器更新已有的組件。當(dāng)你發(fā)布新版的程序或附加組件時(shí),發(fā)布非常容易,只需用Eclipse工具對它們進(jìn)行包裝,然后把它們放在更新服務(wù)器上即可。
幫助系統(tǒng):Eclipse的框架式幫助系統(tǒng)提供可搜索和對內(nèi)容敏感的幫助,通過文檔插件能非常方便地加以擴(kuò)展。因此對于任何建立在Eclipse上的程序而言,無需購買第三方工具即可構(gòu)建、包裝和交付完整的、定制的并且對內(nèi)容敏感的幫助系統(tǒng)。
將Eclipse用作程序框架
那么開始時(shí)將Java IDE的基礎(chǔ)當(dāng)作程序框架至少聽起來是可行的,但為什么會有人這樣做呢?Eclipse完全滿足上文中提到的功能與工具希望列表要求,同時(shí)提供程序開發(fā)環(huán)境,將項(xiàng)目建成一系列Eclipse插件。最開始程序框架提供空的普通程序,但其架構(gòu)是可擴(kuò)展的,非常方便未來的功能增強(qiáng),而且可從遠(yuǎn)端進(jìn)行自我更新。
隨即主要的問題變成要求Eclipse提供多少功能?簡單地說,程序在Eclipse框架上建立時(shí)可刪除那些不重要的功能,然后再增加重要的一些功能。更具挑戰(zhàn)性的問題是從哪里開始?最簡單的案例可以非常極端。例如,當(dāng)建立商用化IDE時(shí),就象我們建立MyEclipse Enterprise工作臺那樣,先開始完整的Eclipse平臺下載和一些其它Eclipse項(xiàng)目,然后在它們的基礎(chǔ)上進(jìn)行創(chuàng)建。而另外一個(gè)極端,在為嵌入式設(shè)備或大小約束很重要的其它環(huán)境建立程序時(shí),Equinox或eRCP將成為更合理的起點(diǎn)。如果配置目標(biāo)有更多的資源,但仍不要求大多數(shù)平臺性能,那么將RCP(可從平臺下載頁面獲得)用作主要框架也許才是正確的出發(fā)點(diǎn)。只需對基本RCP進(jìn)行少許的配置即可快速設(shè)置好“空”程序,如圖1所示,然后集中精力只增加那些能起到增殖作用的功能,而不再增加基礎(chǔ)架構(gòu)。
一旦確立了起始平臺,剩下的程序開發(fā)工作就只是編寫插件并在Eclipse基本框架中增加功能,然后針對目標(biāo)用戶設(shè)定合適的商標(biāo)。例如,一個(gè)大型程序一般要使用許多插件寫成多個(gè)定制透視圖和支持窗口。而在集成一套小型程序時(shí),也許每個(gè)程序可以是自身插件中的單個(gè)透視圖。在這些產(chǎn)品線中,Eclipse也可用作公司自己開發(fā)的程序的集成入口??赡苄允菬o止境的。為了證明這一點(diǎn),下面介紹一些來自世界各地的各種Eclipse程序。
GumTree是一種開放源碼的圖形化用戶接口框架,可用來創(chuàng)建科學(xué)儀器控制臺,如圖2所示。

圖2:GumTree
EclipseTrader是針對Eclipse RCP開發(fā)的開放源碼插件,專用于建立在線股票交易系統(tǒng),具有豐富的功能,如股票價(jià)格瀏覽、帶技術(shù)分析指南的當(dāng)日和歷史圖表、等級II/市場深度分析、新聞瀏覽和系統(tǒng)交易。主窗口如圖3所示。
圖3:Eclipse Trader
Azureus通過Eclipse RCP插件實(shí)現(xiàn)BitTorrent客戶端協(xié)議,捆綁了許多對BitRorrent的初級用戶和高級用戶來說都很有價(jià)值的功能。Azureus是SourceForge站點(diǎn)上被下載最多的程序之一,接口在任何平臺上看起來都很平易近人,這要?dú)w功于SWT,詳見圖4。
圖4:Azureus
Qanyon World Factbook。Qanyon World Factbook程序用于開發(fā)Eclipse RCP在分布式環(huán)境中的使用。與CIA World Factbook網(wǎng)站相似的是,即使在龐雜的客戶環(huán)境中Qanyon World Factbook也應(yīng)顯示國家信息,如圖5所示。

圖5:Qanyon World Factbook
Eclipse的未來
Eclipse還在不斷向前發(fā)展,從縱向看將進(jìn)一步深入軟件工具領(lǐng)域,從橫向看將進(jìn)入全新的市場領(lǐng)域。有趣的是,向新產(chǎn)業(yè)領(lǐng)域的縱向發(fā)展具有與Eclipse最初創(chuàng)建時(shí)同樣的理由。雖然Eclipse最初創(chuàng)建時(shí)是向工具提供商搭建集成化平臺,但各個(gè)可用的RCP使一切都改變了?,F(xiàn)在Eclipse不只是工具提供商使用的平臺,而且已經(jīng)成為一種通用平臺,在軟件工具領(lǐng)域有了廣泛的應(yīng)用。伴隨著這種變化,Eclipse開始吸引其它領(lǐng)域的參與者進(jìn)來,這些參與者希望采用與目前的工具提供商一樣的合作方式 。在不久的將來,我希望看到有志于為實(shí)用性程序、報(bào)告工具、安全性、工藝工作流程和商業(yè)智能化等創(chuàng)建基礎(chǔ)架構(gòu)的組織?,F(xiàn)在Eclipse已經(jīng)完全開放,并立身于整個(gè)軟件產(chǎn)業(yè),它的成員在今后幾年中將呈爆炸性增長。
Eclipse未來成長的另外一個(gè)源動力可能完全來自于軟件產(chǎn)業(yè)外部。衛(wèi)生保健、汽車和金融等不同產(chǎn)業(yè)組織一般要設(shè)置軟件平臺和互操作性標(biāo)準(zhǔn)。然而,如果沒有便攜的、跨平臺標(biāo)準(zhǔn)實(shí)現(xiàn),每個(gè)組織成員必須獨(dú)自根據(jù)產(chǎn)業(yè)標(biāo)準(zhǔn)獨(dú)立地構(gòu)建它們自己的標(biāo)準(zhǔn)。這是一個(gè)艱巨的重復(fù)性勞動,不僅代價(jià)高,也容易出錯。聯(lián)合起來建立一套公共的規(guī)范兼容性架構(gòu)將有效地降低成本,同時(shí)確保完善的互操作性。但在他們合作之前競爭對手們需要的是能使他們平等受益的等級運(yùn)動場。當(dāng)他們開始研究他們的選項(xiàng)時(shí),他們會發(fā)現(xiàn)Eclipse的成熟、可擴(kuò)展和免版稅再分配模型作為他們合作開發(fā)工作的基礎(chǔ)具有非常大的吸引力。