<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)航:
     
    主站蜘蛛池模板: 最近免费中文字幕4| 波多野结衣免费一区视频| 国产无遮挡色视频免费视频| jizz免费观看| 亚洲一区精品视频在线| 中文字幕精品亚洲无线码一区应用| 久久免费视频99| 国产午夜无码精品免费看| 国产精品手机在线亚洲| 亚洲中文字幕无码mv| 中文字幕亚洲第一在线| 久久亚洲AV成人无码电影| 亚洲精品无码永久在线观看你懂的| 全免费a级毛片免费**视频| 37pao成人国产永久免费视频| 国产性生大片免费观看性| 在线观看亚洲精品专区| 天堂亚洲国产中文在线| 亚洲av日韩av无码av| 亚洲精品日韩中文字幕久久久| 亚洲av最新在线网址| 亚洲国产精品嫩草影院在线观看 | 亚洲成AV人片在| 亚洲国产精品国自产拍AV| 亚洲AV永久无码精品一百度影院| 国产gv天堂亚洲国产gv刚刚碰| 日韩视频免费一区二区三区| 久久不见久久见免费影院| 日本一道高清不卡免费| 好大好深好猛好爽视频免费| 日韩高清在线高清免费| 亚洲国产成人影院播放| 亚洲高清在线播放| 亚洲乱码在线播放| 色偷偷噜噜噜亚洲男人| aa毛片免费全部播放完整| 最近免费中文字幕高清大全| 97无码免费人妻超级碰碰碰碰| 免费看一级做a爰片久久| 亚洲精品白浆高清久久久久久| 亚洲福利一区二区精品秒拍|