<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Live a simple life

    沉默(zhu_xing@live.cn)
    隨筆 - 48, 文章 - 0, 評論 - 132, 引用 - 0
    數據加載中……

    【Eclipse插件開發】Eclipse中的擴展點機制存在的理由

     

    Eclipse中的擴展點機制存在的理由

                                                                        朱興(zhu_xing@live.cn

           眾所周知,Eclipse平臺本身就作為一個成功的OSGI應用,從技術層面講,Eclipse本身就是由OSGI協議驅動的(我想,這句話大家已經聽的很多遍了~_~)。同時EclipseOSGI組件機制做了有力的擴充,也就是我們所熟知的擴展點(Extension Point)機制,關于擴展點的支持也作為EquinoxEclipseOSGI協議實現)一部分呈現給了廣大的Eclipse開發者和用戶。關于為什么會存在擴展點這個補充,也是國外技術論壇上經常討論的話題,在這也斗膽猜測一把,僅供大家參考。

           OSGI的關鍵特性和適用場景】

           OSGI為我們提供了一個追求模塊化的方式來開發、部署、運行、管理組件(OSGI Bundle)的機制,其主要的技術特征包括模塊化、生命周期管理、松耦合交互等。OSGI為我們提供了組件模塊化所需要的技術,并允許以服務等方式來實現模塊之間的動態松耦合交互,這也就為我們開發盼望已久的Pluginable System打下了堅實的基礎(有關OSGI的技術,可以參加OSGI協議和國外論壇上的一些關于OSGI具體應用的討論)。本質上講,OSGI在追求組件模塊化,并希望組件本身具備黑盒的效果,其并沒有投入很大精力來關注如何讓一個組件更容易擴展,更加開放。

           通過上面的闡述我們可以看出來,OSGI本身適用于那種建立模塊化、動態管理、即插即用的組件化系統,如果應用于產品軟件的開放,對建立一個可靠的內核是非常有用的,OSGI對應的一些成功應用包括 Eclipse、JBoss AS、IBM Websphere等。

           Eclipse的需求】

    Eclipse本身作為一個基礎平臺存在,其關鍵需求就是來方便用戶擴展,并能夠很方便的和Eclipse平臺本身做無縫集成。說白了,在Eclipse中一個組件(Eclipse Plug-in)的任務大致為二:提供擴展實現或者聲明擴展需求(當然,不完全針對庫插件、feature…)。我們知道,一個軟件產品的技術實現必須要以符合產品需求為基礎,Eclipse作為一個軟件產品最大的需求就是如何方便的允許用戶擴展并無縫地集成這些擴展。

    如果要滿足Eclipse的這種需求,需要一個組件(Eclipse plug-in)還需要具備什么關鍵特質呢?開放、易擴展!!!

    顯然,OSGI本身并不能滿足Eclipse的部分關鍵需求(面向開發者和用戶的需求),但是OSGI所帶來的模塊化、聲明周期管理、懶加載等機制都是Eclipse迫切需要的,自然選擇了OSGI來作為Eclipse內核的驅動協議。考慮到擴展和便于無縫集成這兩大關鍵需求,EclipseOSIG之上面向用戶提供了擴展點的機制,以一種xml描述的方式來配置組件之間的擴展關系,涉及到的三個核心概念便是我們熟知的:擴展點(Extension Point)、擴展(Extension)和擴展注冊表(Extension Registry)。

    【實例討論】

    上面說了一些偏于抽象的東西,下面配合幾個實例來大致說明一下。

    首先我們討論一個偏于理論的例子,假設我們現在當前系統有兩個OSGI bundle,再加入第三個陌生的bundle,那這個新的bundle是不能被自動發現的(auto-discovered,自己發明的~_~),除非在被顯示調用的情況下。同比,如果當前系統中有一個plug-in,其本身聲明了一個擴展點(host plug-in),然后系統中引入了一個新的plug-in,按照host plug-in定義的擴展契約提供了擴展(extesion plug-in),那么這個新的plug-in是可以被自動發現的,host plug-in可以借助eclipse擴展注冊表查找對應的擴展,而同時避免了兩個plug-in之間的緊密耦合(說明:有人以為extension plug-inhost plug-in之間是緊密耦合的,我覺得更合適的說法是plug-in是開發的)。

    我們知道Eclipse本身的體系架構是:微內核(micro kernel)、核心插件(core plug-ins)和用戶應用插件(application plug-ins)


    上圖中的runtime、workbenchresource就是Eclipse所謂的核心插件,而JDT恰恰是在這些核心插件的基礎上提供擴展,并做無縫集成;同時也定義了一些擴展點,供JDT自身或者其他擴展插件使用并做無縫集成。

    對普通Eclipse工具用戶而言,如果沒有擴展點的機制,用戶能夠方便的將第三方工具安裝(本質上是集成)到Eclipse中嗎?是不是要關心一些技術細節啊?

    【總結】

    上面,一直在說Eclipse plug-inOSGI bundle的基礎上在追求開放和擴展,其實從技術本質上講,Eclipse是對OSGI協議在插件間的交互方式做了補充,擴展和擴展點也成為了我們在Eclipse插件開發過程中最主要的插件間交互方式了,而OSGI中定義的組件間松耦合交互方式(OSGI Service)卻并沒有很大的用武之地(對用戶而言)。說到這里,可能會給大家造成一個疑問: Eclipse擴展點機制這么好,為什么不加入OSGI協議呢?需求不同。

    最后再回顧一下,Eclipse之所以提供了擴展點機制,本質上取決于Eclipse自身的部分關鍵需求:擴展和集成。OSGI協議本身尤其應用場景,Eclipse的擴展點機制是針對Eclipse自身需求在OSGI之上做的有力補充。



    本博客中的所有文章、隨筆除了標題中含有引用或者轉載字樣的,其他均為原創。轉載請注明出處,謝謝!

    posted on 2008-08-11 12:44 zhuxing 閱讀(2920) 評論(4)  編輯  收藏 所屬分類: Eclipse Plug-in & OSGI

    評論

    # re: 【Eclipse插件開發】Eclipse中的擴展點機制存在的理由  回復  更多評論   

    如何使用tdd進行eclipse plug in開發呢?

    mockobject還是junit plugin test?

    在m v c的分層之中

    c總是要調用eclipse的v去查詢一些資源存不存在?

    這些算不算分層不清晰?

    2008-08-12 09:39 | xxuu503

    # re: 【Eclipse插件開發】Eclipse中的擴展點機制存在的理由  回復  更多評論   

    @xxuu503
    1、我的建議是用PDEUnit進行插件開發過程中的單元測試。但是有一個問題,那就是在對ui插件進行測試的時候,也會較為繁瑣,目前沒有看到什么特別出色的工具?;旧暇褪菃⒁粋€workbench或者使用鍵盤鉤子的技術

    2、第二個問題當然沒有違反分層原則。其實,分層原則很廣泛:
    基礎功能模塊和上層具體功能模塊分層
    模塊ui和非ui部分進行分層
    具體實現細節中注意分層思想,避免緊耦合

    m之上可能有很多個c,針對的場景不一樣,v肯定是場景的一部分 ~_~
    2008-08-12 12:55 | zhuxing

    # re: 【Eclipse插件開發】Eclipse中的擴展點機制存在的理由  回復  更多評論   

    謝謝指教
    2008-08-12 18:37 | xxuu503
    主站蜘蛛池模板: igao激情在线视频免费| 亚洲久热无码av中文字幕| a级毛片免费观看在线| 亚洲国产人成精品| 两性色午夜视频免费网| 亚洲 小说区 图片区 都市| 国产精品亚洲а∨无码播放麻豆| 在线免费不卡视频| 亚洲欧美黑人猛交群| 免费亚洲视频在线观看| 一级毛片免费播放视频| 亚洲免费观看视频| 免费无码中文字幕A级毛片| 亚洲视频免费播放| 欧美三级在线电影免费| 亚洲Av无码国产一区二区| 亚洲av午夜精品一区二区三区 | 最近2022中文字幕免费视频| 亚洲美女色在线欧洲美女| 日韩精品无码区免费专区| 亚洲精品亚洲人成在线| 亚洲va中文字幕无码| 最近中文字幕大全免费版在线| 亚洲人成网址在线观看| 免费看韩国黄a片在线观看| 香港经典a毛片免费观看看| 国产AV无码专区亚洲AWWW| 99久久精品免费视频| 亚洲精品无码不卡在线播放| 亚洲日韩国产精品乱| 182tv免费观看在线视频| 亚洲精品无码一区二区| 亚洲中文字幕视频国产| 7x7x7x免费在线观看| 欧美亚洲国产SUV| 亚洲影院在线观看| 日本免费一区二区三区最新| 久久精品免费视频观看| 亚洲综合色一区二区三区| 亚洲人成人77777网站| 日本人的色道www免费一区|