<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對應的一些成功應用包括 EclipseJBoss ASIBM 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)


    上圖中的runtimeworkbenchresource就是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
    主站蜘蛛池模板: 亚洲AV成人精品日韩一区18p| 岛国大片免费在线观看| 亚洲熟伦熟女新五十路熟妇 | 最近免费mv在线电影| 亚洲一二成人精品区| 可以免费观看的毛片| 亚洲va久久久噜噜噜久久男同 | 四虎国产精品成人免费久久| 亚洲国产精品成人AV无码久久综合影院| 亚洲精品色在线网站| 国产免费一区二区三区VR| 边摸边吃奶边做爽免费视频网站| 亚洲福利精品电影在线观看| 亚洲黄片手机免费观看| 国产成人A人亚洲精品无码| 美女视频黄a视频全免费网站色窝| 67pao强力打造67194在线午夜亚洲| 91免费人成网站在线观看18| 伊人久久亚洲综合影院首页| 国产在线观看www鲁啊鲁免费| 中美日韩在线网免费毛片视频 | 青青免费在线视频| 精品亚洲综合久久中文字幕| 91麻豆最新在线人成免费观看| 亚洲欧美日韩综合久久久| 亚洲国产精品一区二区第一页免 | 日本一道综合久久aⅴ免费| 美女无遮挡免费视频网站| 亚洲老妈激情一区二区三区| 免费观看的毛片大全| 特级毛片免费播放| 久久亚洲日韩精品一区二区三区| 亚洲欧洲免费无码| 72pao国产成视频永久免费| 亚洲综合无码一区二区| 国产区卡一卡二卡三乱码免费| 日本一区午夜艳熟免费| 亚洲熟妇无码av另类vr影视| 亚洲色婷婷综合久久| 久久久久久国产精品免费免费| 一二三区免费视频|