隨筆-1  評(píng)論-68  文章-98  trackbacks-0

          1、Eclipse 法則(Eclipse Rule)

          ?

          擴(kuò)展者( Extender) ――添加插件

          ?????? 貢獻(xiàn)法則( Contribution Rule ):一切皆是貢獻(xiàn)。

          ?????? 遵循法則( Conformance Rule ):插件必須遵循預(yù)期的接口。

          ?????? 共享法則( Sharing Rule ):增加,不要取代。

          ?????? 有樣學(xué)樣法則( Monkey See/Monkey Do Rule ):遇到問題時(shí),首先復(fù)制類似插件的結(jié)構(gòu)。

          ?????? 相關(guān)性法則( Relevance Rule ):只有在操作有可能成功時(shí)菜顯示你所貢獻(xiàn)的操作。

          ?????? 整合法則( Integration Rule ):要整合,不要分裂。

          ?????? 責(zé)任法則( Responsibility Rule ):明確指出你所開發(fā)的插件時(shí)問題的源頭。

          ?????? 針對(duì) API 契約編程法則( Program to API Contract Rule ):首先檢查 Eclipse API 契約,然后針對(duì)契約編程。

          ?????? Other 法則( Other Rule ):讓用戶可以選擇所有東西,但把那些通常不用于當(dāng)前視角的選項(xiàng)放在 Other… 對(duì)話框中。

          ?????? IResource 適配法則( Adapt to IResource Rule ):應(yīng)該盡量為領(lǐng)域?qū)ο蠖x IResource 適配器。

          ?????? 分層法則( Strata Rule ):將語言無關(guān)的功能與特定于具體語言的功能分開,將核心性能與 UI 分開。

          ?????? 用戶連貫性法則( User Continuity Rule ):在多次會(huì)話之間,應(yīng)該保持 UI 狀態(tài)一致。

          ?

          促成者( Enabler? ) ――發(fā)布擴(kuò)展點(diǎn)

          ?????? 邀請(qǐng)法則( Invitation Rule ):盡可能的邀請(qǐng)別人為你的作品作出貢獻(xiàn),發(fā)布擴(kuò)展點(diǎn)。

          ?????? 懶加載法則( Lazy Loading Rule ):只有在真正需要的時(shí)候才加載插件。

          ?????? 安全平臺(tái)法則( Safe Platform Rule ):作為擴(kuò)展點(diǎn)的提供者,你必須保護(hù)好自己,不要讓擴(kuò)展者的誤操作給你造成損失。

          ?????? 公平競(jìng)爭(zhēng)法則( Fair Play Rule ):所有使用者遵守同樣的游戲規(guī)則,包括我自己。

          ?????? 明確擴(kuò)展法則( Explicit Extension Rule ):明確說明平臺(tái)的什么地方可供擴(kuò)展。

          ?????? 發(fā)散性法則( Diversity Rule ):一個(gè)擴(kuò)展點(diǎn)接納多個(gè)擴(kuò)展。

          ?????? 良好防御法則( Good Fences Rule ):如果要交出程序的控制權(quán),首先保護(hù)好你自己。

          ?????? 用戶決定法則( User Arbitration Rule ):如果有多個(gè)選擇,由用戶決定使用哪一個(gè)。

          ?????? 明確 API 法則( Explicit API Rule ):將 API 與插件內(nèi)部使用的類分開。

          ?????? 穩(wěn)定性法則( Stability Rule ):如果你已經(jīng)開始邀請(qǐng)其它人作出貢獻(xiàn),就不要再改變游戲規(guī)則。

          ?????? 保守 API 法則( Defensive API Rule ):只暴露你有信心的 API ,但同時(shí)也應(yīng)該做好準(zhǔn)備暴露更多的 API ,因?yàn)槭褂谜邥?huì)要求你這樣做。(不含 internal 的包被認(rèn)為是公開的、允許后續(xù)的擴(kuò)展者使用的;不含 internal 的包,則不是打算拿到插件外使用的。)

          ?

          發(fā)布者( Publisher) ――發(fā)布插件

          ?????? 許可法則( License Rule ):每項(xiàng)貢獻(xiàn)品都應(yīng)該提供許可證。

          2、Eclipse 插件(Plug-in)

          何時(shí)需要一個(gè)插件類

          ?

          ?????? 每個(gè)插件都由一個(gè)插件類來代表。插件類是一個(gè)Singleton,其中提供了一些鉤子方法,可以對(duì)插件的什么周期事件作出響應(yīng)。可以在插件第一次加載時(shí)讀入所需的資源,也可以在插件停止時(shí)做必要的清理工資。另外,插件還負(fù)責(zé)提高一些共享信息。

          ?

          投影(Shadow)的世界

          ?

          ?????? Eclipse平臺(tái)啟動(dòng)時(shí)會(huì)將所有插件清單文件讀入一個(gè)插件注冊(cè)表中,為每個(gè)插件創(chuàng)建一個(gè)投影。此時(shí)不會(huì)加載插件本身,只加載它們的描述信息。(Platform.getPluginRegistry()

          ?

          開發(fā)插件時(shí),不要在項(xiàng)目屬性中修改構(gòu)建classpath,始終在清單文件中修改。

          ?

          Eclipse中,每個(gè)插件都有自己的類加載器(class loader)和自己的類查找路徑(classpath),后者將繼承該插件所導(dǎo)入的其它插件的classpath。當(dāng)插件的類加載器加載插件的第一個(gè)類時(shí),就會(huì)激活該插件。

          ?

          插件類加載器

          ?

          1、? 插件類加載器的上級(jí)加載器,Eclipse的引導(dǎo)加載器,boot.jar

          2、? 插件本身的類加載器,plugin.xml清單文件中的<run-time>元素中描述的類。

          3、? 相依插件的類加載器,如果插件依賴于其它插件,在類查找時(shí),會(huì)在內(nèi)部使用一個(gè)URL類加載器。

          4、? 不包括應(yīng)用程序類/系統(tǒng)CLASSPATH變量的加載器。

          ?

          加載擴(kuò)展的全過程

          ?

          1、? Eclipse平臺(tái)取得擴(kuò)展點(diǎn)。

          2、? 取得以在此擴(kuò)展點(diǎn)上注冊(cè)的擴(kuò)展(實(shí)現(xiàn)IExtension接口)。

          3、? 對(duì)于每個(gè)擴(kuò)展,取出其中以XML方式聲明的配置元素(實(shí)現(xiàn)IConfigurationElement接口)。

          4、? 對(duì)于每個(gè)配置元素,根據(jù)該元素XML聲明中class屬性的值創(chuàng)建一個(gè)對(duì)象,確保定義的屬性完整、有效。

          5、? 將新創(chuàng)建的擴(kuò)展對(duì)象保存到一個(gè)集合中,而不是直接返回一個(gè)擴(kuò)展對(duì)象。

          ?

          理想的開發(fā)策略:

          1、? 信心:在增加新性能或修改舊結(jié)構(gòu)時(shí),不比擔(dān)心對(duì)原代碼造成破壞。

          2、? 學(xué)習(xí):快速而自信地學(xué)習(xí)Eclipse地新領(lǐng)域。

          3、? 設(shè)計(jì):鼓勵(lì)自己和同事認(rèn)真考慮設(shè)計(jì),尤其是代碼地外在接口,然后去考慮如何實(shí)現(xiàn)。

          ?

          測(cè)試驅(qū)動(dòng)開發(fā)(Test-Driven Development, TDD)的開發(fā)循環(huán):

          1、? 編寫欲添加功能的測(cè)試。

          2、? 針對(duì)這個(gè)測(cè)試引用到、暫未存在的類和方法,創(chuàng)建一段空的占用程序,使測(cè)試通過編譯。

          3、? 實(shí)現(xiàn)測(cè)試,測(cè)試測(cè)試應(yīng)該失敗。

          4、? 盡量對(duì)實(shí)現(xiàn)代碼加以清掃,例如去除其中的重復(fù)代碼。

          ?

          插件的測(cè)試策略

          ?

          ?????? 從審美的角度,每個(gè)插件應(yīng)該盡可能少的依賴其它插件;從實(shí)用的角度,以測(cè)試驅(qū)動(dòng)的方式開發(fā)插件的每個(gè)部分。應(yīng)該首先創(chuàng)建測(cè)試插件,讓它依賴于新插件,以便完全用測(cè)試來驅(qū)動(dòng)新插件的開發(fā)。

          ?

          工作副本(working copy)是Eclipse JDT引入的一個(gè)概念,是原有的編譯單元在內(nèi)存中的復(fù)制品。讓用戶修改時(shí),操作的實(shí)際是Java編輯器所創(chuàng)建的工作副本;當(dāng)用戶保存編譯單元時(shí),Java編輯器才把副本提交到文件系統(tǒng),此時(shí)對(duì)編譯單元的修改才會(huì)以Java元素變化增量的形式廣播出去。(JavaUI.getWorkingCopyManager()

          ?

          視角,定義了(一組)視圖和編輯器的排列方式,工作臺(tái)頁面的布局,解決某個(gè)完整問題的環(huán)境。

          ?

          降低插件的維護(hù)成本:良好的異常處理和錯(cuò)誤報(bào)告機(jī)制;提供聯(lián)機(jī)幫助文檔(Eclipsehelp擴(kuò)展點(diǎn)的擴(kuò)展)。

          ?

          分段(fragment)使開發(fā)者能夠向現(xiàn)有的插件中添加代碼和資源。(fragment.xml

          分段的用途:

          1、? 為插件提供額外的字符串翻譯(語言包)。

          2、? 為現(xiàn)有組件提供特定于平臺(tái)的內(nèi)容。

          posted on 2006-08-22 01:38 Xu Jianxiang 閱讀(734) 評(píng)論(0)  編輯  收藏 所屬分類: Open Source
          主站蜘蛛池模板: 深圳市| 肥东县| 新津县| 长白| 酒泉市| 康定县| 迭部县| 偃师市| 那坡县| 远安县| 桦甸市| 鄄城县| 黑山县| 讷河市| 桐城市| 鄯善县| 自治县| 大姚县| 牡丹江市| 七台河市| 桂阳县| 泾川县| 三河市| 达尔| 徐州市| 青海省| 鹿泉市| 安平县| 翁牛特旗| 寻乌县| 双辽市| 达拉特旗| 休宁县| 介休市| 温州市| 花垣县| 慈溪市| 康保县| 石棉县| 桂平市| 莆田市|