架構(gòu)必須持續(xù)地進(jìn)行檢查以評(píng)估其是否依然合適。它是否能引入新的技術(shù)?它是否能帶動(dòng)社區(qū)的成長?它是否便于吸收新的提交者?在2007年底,Eclipse項(xiàng)目確定這些問題的答案是否定的所以他們著手設(shè)計(jì)新版本的Eclipse。同時(shí),他們意識(shí)到有成千上萬個(gè)Eclipse項(xiàng)目依賴于已有的API。在2008年的時(shí)候,他們創(chuàng)建了一個(gè)新的孵化項(xiàng)目,這個(gè)項(xiàng)目有三個(gè)明確的目標(biāo):通過開放式的架構(gòu)來簡化Eclipse開發(fā)模型、吸引新的開發(fā)者以及利用基于web技術(shù)的優(yōu)勢。
圖6.10 4.0示例應(yīng)用生成的模型
6.4.2級(jí)聯(lián)樣式表樣式
Eclipse發(fā)布于2001年,早于富互聯(lián)網(wǎng)應(yīng)用的時(shí)代,在這個(gè)時(shí)代可以使用CSS來實(shí)現(xiàn)皮膚的切換以提供不同的外觀和體驗(yàn)。Eclipse4.0提供了使用樣式表來容易地修改Eclipse應(yīng)用外觀和體驗(yàn)的功能。默認(rèn)的CSS樣式單可以在org.eclipse.platform bundle的css文件下找到。
6.4.3 依賴注入
Eclipse的擴(kuò)展注冊(cè)器和OSGi服務(wù)都是基于服務(wù)模型編程的。按照慣例,服務(wù)編程模型包含服務(wù)的生產(chǎn)者和消費(fèi)者。而居間者(broker)負(fù)責(zé)管理生產(chǎn)者和消費(fèi)者的關(guān)系。
圖 6.12 服務(wù)居間者上下文(Service Broker Context)
生產(chǎn)者將服務(wù)和對(duì)象添加到上下文中儲(chǔ)存。通過上下文,服務(wù)被注冊(cè)到消費(fèi)者對(duì)象中。消費(fèi)者生命需要的服務(wù)而上下文負(fù)責(zé)確定如何滿足這個(gè)需求。這種方式使得使用動(dòng)態(tài)服務(wù)更容易了。在Eclipse 3.x中,消費(fèi)者需要注冊(cè)監(jiān)聽器,當(dāng)服務(wù)可用或不可用的時(shí)候獲取通知。在Eclipse 4.x中,一旦一個(gè)上下文注入到消費(fèi)者對(duì)象中,任何變化都會(huì)自動(dòng)傳遞到那個(gè)對(duì)象中。換句話說,依賴注入會(huì)再次發(fā)生。消費(fèi)者通過使用Java 5的注解來聲明使用上下文,這些注解是符合JSR 330規(guī)范的如@inject,除此以外還會(huì)有一些自定義的Eclipse注解。構(gòu)造器、方法以及域注入都是支持的。4.x的運(yùn)行環(huán)境會(huì)掃描對(duì)象來尋找這些注解。實(shí)際執(zhí)行的操作取決于使用的注解。
分離上下文和應(yīng)用使得組件能夠更好地常用,也使得服務(wù)的消費(fèi)者免于理解內(nèi)部實(shí)現(xiàn)。在4.x中,更新狀態(tài)行的代碼如下:
@Inject
IStatusLineManager statusLine;
? ? ?
statusLine.setMessage(msg);
6.4.4 應(yīng)用服務(wù)
Eclipse 4.0的一個(gè)主要目標(biāo)是簡化用戶使用的API以便于其實(shí)現(xiàn)通用的服務(wù)。簡單的服務(wù)列表被稱為“20件事”(the twenty things)或Eclipse應(yīng)用服務(wù)。其目標(biāo)是為用戶提供單獨(dú)的API使得用戶不必深入了解所有的API。它們被組織成獨(dú)立的服務(wù),因此可以用于其它非Java語言,像JavaScript。例如,有這樣的API可以訪問應(yīng)用模型,讀取和修改首選項(xiàng)以及報(bào)告錯(cuò)誤和警告。
基于組件化架構(gòu)的Eclipse可以不斷吸收新的技術(shù)而同時(shí)保證向后的兼容性。這樣的成本比較高昂,但是回報(bào)在于Eclipse社區(qū)在不斷發(fā)展壯大,因?yàn)橛脩裟軌蚧诮⑵饋淼男湃危粩嗍褂眠@些穩(wěn)定的API開發(fā)產(chǎn)品。 Eclipse廣大的用戶群體會(huì)有不同的使用場景而我們眾多的API使得新的用戶很難適應(yīng)和理解?;仡欉^去,我們應(yīng)該讓API更簡單一些。如果80%的用戶只使用20%的API,有必要對(duì)其進(jìn)行簡化,這也是Eclipse 4.x創(chuàng)建的原因之一。
聰明的用戶群體帶來了有趣的使用場景,例如分解出IDE中的bundle來構(gòu)建RCP應(yīng)用。另一方面,群體有時(shí)候也會(huì)創(chuàng)造一些噪音來要求實(shí)現(xiàn)很少見的場景,這消耗了大量的時(shí)間來實(shí)現(xiàn)。
在Eclipse項(xiàng)目的早期,提交者有充裕的時(shí)間來編寫文檔、樣例以及回答社區(qū)的問題。隨著時(shí)間的推移,這個(gè)任務(wù)轉(zhuǎn)移給了整個(gè)Eclipse社區(qū)。我們本可以提供更好地文檔和樣例來幫助社區(qū),但是因?yàn)槊總€(gè)釋放版本都會(huì)有大量的特性使得這變得很困難。一般情況下,軟件發(fā)布總是會(huì)延期;然而在Eclipse,我們總是按期發(fā)布,這樣做同時(shí)也可以幫助我們的客戶建立起按期發(fā)布產(chǎn)品的信心。
通過吸收新技術(shù)以及重新改造Eclipse的外觀和運(yùn)行機(jī)制,我們會(huì)持續(xù)與用戶進(jìn)行交流并使他們留在我們的社區(qū)。如果你對(duì)Eclipse相關(guān)信息感興趣,請(qǐng)?jiān)L問http://www.eclipse.org。
腳注
更多建議: