<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, 評(píng)論 - 132, 引用 - 0
    數(shù)據(jù)加載中……

    【Eclipse插件開(kāi)發(fā)】在什么情況下創(chuàng)建擴(kuò)展點(diǎn)

            我想絕大部分Eclipse插件開(kāi)發(fā)人員對(duì)擴(kuò)展點(diǎn)這個(gè)概念應(yīng)該都比較熟悉了,那么什么時(shí)候決定創(chuàng)建自己的擴(kuò)展點(diǎn)呢?簡(jiǎn)單的說(shuō)一下俺的看法,錯(cuò)了不要笑話。
            為什么說(shuō)這個(gè)問(wèn)題呢?親眼看到一些插件開(kāi)發(fā)剛?cè)腴T的人,不怎么懂得擴(kuò)展點(diǎn)相關(guān)的東西,也談不上理解擴(kuò)展點(diǎn)機(jī)制,所以這個(gè)時(shí)候從來(lái)不自己定義新的擴(kuò)展點(diǎn);過(guò)了一段時(shí)間之后,感覺(jué)使用Eclipse擴(kuò)展點(diǎn)有點(diǎn)經(jīng)驗(yàn)了(尤其是workbench相關(guān)的擴(kuò)展點(diǎn)肯定經(jīng)常使用),開(kāi)始定義自己的擴(kuò)展點(diǎn)了,....,災(zāi)難發(fā)生了,亂定義擴(kuò)展點(diǎn),各種想法的擴(kuò)展點(diǎn)都出來(lái)了.....

            背景知識(shí):【Eclipse插件開(kāi)發(fā)】Eclipse中的擴(kuò)展點(diǎn)機(jī)制存在的理由
               
            在什么情況下你才會(huì)創(chuàng)建你自己的擴(kuò)展點(diǎn)呢?一句話:允許擴(kuò)展,而且是主動(dòng)邀請(qǐng)外部擴(kuò)展

            在定義擴(kuò)展點(diǎn)之前,你可以試著問(wèn)一下自己如下兩個(gè)問(wèn)題:
            1、從需求角度考慮,要這種需求存在嗎?
            2、從技術(shù)視角思考,你要用擴(kuò)展點(diǎn)描述的東西是不是屬于模塊內(nèi)部的實(shí)現(xiàn)?
            3、從技術(shù)視角思考,即使需要擴(kuò)展,真的需要?jiǎng)討B(tài)掛入嗎?java默認(rèn)的靜態(tài)注入不可以?
            4、從技術(shù)視角思考,你處的模塊是不是一個(gè)上層功能模塊?
        
            關(guān)于第一點(diǎn),就去看一下需求文檔,對(duì)應(yīng)的功能點(diǎn)需求描述如何。這個(gè)時(shí)候從客戶的角度看,客戶會(huì)針對(duì)你的模塊進(jìn)行二次開(kāi)放嗎,如果開(kāi)發(fā),需要注冊(cè)擴(kuò)展到你的模塊嗎?

            關(guān)于第二點(diǎn),如果你要用擴(kuò)展點(diǎn)描述的東西不是對(duì)模塊外部可見(jiàn)的,是屬于你模塊里面的內(nèi)部實(shí)現(xiàn),擴(kuò)展點(diǎn)肯定用不上。

            關(guān)于第三點(diǎn),是很多新人非常容易犯的錯(cuò)誤,將語(yǔ)言特性和平臺(tái)機(jī)制混在了一起。舉個(gè)例子,假設(shè)你定義了一個(gè)策略接口IPolicy,有個(gè)對(duì)應(yīng)的manager類型的角色在管理IPolicy實(shí)例,現(xiàn)有實(shí)現(xiàn)PolicyA、PolicyB,
     1 public class PolicyManager {
     2     private static PolicyManager manager;
     3     
     4     private List<IPolicy> policyList = new ArrayList<IPolicy>(5);
     5     
     6     /**
     7      * sinleton
     8      */
     9     private PolicyManager() {
    10         policyList.add(new PolicyA());
    11         policyList.add(new PolicyB());
    12     }
    13 
    14     public static PolicyManager getInstance() {
    15         if (manager == null)
    16             manager = new PolicyManager();
    17         
    18         return manager;
    19     }
    20     
    21     public static IPolicy[] getPolicys() {
    22         //TODO:
    23     }
    24 }
    而且你感覺(jué)以后還會(huì)有有PolicyC加入。那就加入好了,加入的時(shí)候望你的manager里面用代碼注冊(cè)一下就可以了。那可能會(huì)問(wèn),這樣不是修改代碼了嗎,如果用擴(kuò)展點(diǎn),那么不就不用修改manager的代碼了?  要記住,擴(kuò)展點(diǎn)是平臺(tái)機(jī)制,比語(yǔ)言特性高一個(gè)level。在這種場(chǎng)景下,除非你確實(shí)需要外部參與提供新的IPolicy實(shí)現(xiàn)(利用擴(kuò)展點(diǎn)動(dòng)態(tài)掛入),否則就老實(shí)用java語(yǔ)言支持的吧。

            關(guān)于第四點(diǎn),看一下Eclipse自身提供的擴(kuò)展點(diǎn)就知道了。Eclipse中大部分?jǐn)U展點(diǎn)基本上都是在兩中類型模塊中提供的:一是基礎(chǔ)模塊,例如runtime、resource management、workbench;二是可能需要二次定制開(kāi)發(fā)的模塊,例如JDT,因?yàn)楹芏鄨?chǎng)景下用戶會(huì)基于JDT進(jìn)行擴(kuò)展開(kāi)發(fā),往JDT中提供自己的擴(kuò)展。  如果你的模塊是一個(gè)上層的功能模塊,而且也可以肯定不會(huì)有其他模塊會(huì)依賴于它,那么怎么可能會(huì)存在擴(kuò)展點(diǎn)呢???如果你現(xiàn)在做的是一個(gè)IDE,創(chuàng)建了自己的工程類型,那么現(xiàn)有的文件類型就有可能會(huì)擴(kuò)展。你現(xiàn)在在設(shè)計(jì)一個(gè)project builder,正常的設(shè)計(jì)邏輯當(dāng)然是針對(duì)不同文件類型去調(diào)用對(duì)應(yīng)的編譯器,那這種編譯器就需要?jiǎng)討B(tài)掛入了。例如你的針對(duì)文件的編譯器接口是IModelCompiler,那你就創(chuàng)建一個(gè)compiler擴(kuò)展點(diǎn),你現(xiàn)有的compiler實(shí)現(xiàn)也是以擴(kuò)展點(diǎn)的方式動(dòng)態(tài)掛入,公平法則啊。

            幾點(diǎn)綜合考慮吧

    本博客中的所有文章、隨筆除了標(biāo)題中含有引用或者轉(zhuǎn)載字樣的,其他均為原創(chuàng)。轉(zhuǎn)載請(qǐng)注明出處,謝謝!

    posted on 2008-09-04 18:14 zhuxing 閱讀(2305) 評(píng)論(1)  編輯  收藏 所屬分類: Eclipse Plug-in & OSGI

    評(píng)論

    # re: 【Eclipse插件開(kāi)發(fā)】在什么情況下創(chuàng)建擴(kuò)展點(diǎn)  回復(fù)  更多評(píng)論   

    好文章,擴(kuò)展點(diǎn)更像是一個(gè)配置級(jí)別的API。
    2008-09-04 21:22 | Always BaNg.

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 国产精品亚洲二区在线| 亚洲狠狠狠一区二区三区| 美女又黄又免费的视频| 免费高清av一区二区三区| jiz zz在亚洲| 日本高清免费中文字幕不卡| 99在线在线视频免费视频观看 | 成人免费av一区二区三区| 亚洲色偷偷狠狠综合网| 久久国产精品免费一区二区三区 | 免费女人高潮流视频在线观看| 久久精品亚洲综合一品| 777成影片免费观看| 亚洲国产电影在线观看| 在线观看免费a∨网站| 久久精品国产亚洲AV电影网| 亚洲人成网站色在线入口| a级毛片在线免费| 337p日本欧洲亚洲大胆精品555588 | 中中文字幕亚洲无线码| 国产精品无码免费视频二三区| 香蕉国产在线观看免费| 亚洲av中文无码乱人伦在线咪咕| 免费A级毛片无码A∨| 一本天堂ⅴ无码亚洲道久久| 午夜精品一区二区三区免费视频| 亚洲精品无码你懂的网站| a毛片免费在线观看| 亚洲一级黄色大片| 免费jlzzjlzz在线播放视频| 91成人免费福利网站在线| 91午夜精品亚洲一区二区三区| 真实乱视频国产免费观看 | 搜日本一区二区三区免费高清视频| 亚洲AV无码一区二区三区系列 | 在线观看亚洲精品国产| 青娱分类视频精品免费2| 美女视频黄频a免费| 亚洲激情在线视频| 亚洲精品高清在线| 成人免费黄色网址|