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

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

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

    向RCP致敬

    作為一個(gè)桌面應(yīng)用的開(kāi)發(fā)者,向 RCP 致敬的理由會(huì)是 RCP 提供了豐富的界面控件,使得基于 Java 開(kāi)發(fā)桌面應(yīng)用也變得容易了很多,盡管仍然不能和基于 VB Delphi 去相比;對(duì)于我而言,盡管使用 RCP 也是為了開(kāi)發(fā)桌面應(yīng)用,但 RCP 給我?guī)?lái)的更多的感覺(jué)是在它充分發(fā)揮插件化系統(tǒng)的優(yōu)勢(shì)方面, RCP 可以視為基于 OSGi 構(gòu)建插件化系統(tǒng)的最佳實(shí)踐的指導(dǎo),從 RCP 的設(shè)計(jì)中,可以學(xué)習(xí)到如何讓?xiě)?yīng)用做到模塊化、讓?xiě)?yīng)用做到動(dòng)態(tài)化,甚至還可以學(xué)習(xí)到象如何自動(dòng)生成界面這樣的細(xì)節(jié)設(shè)計(jì)思想,盡管我自己基于 OSGi 做應(yīng)用型的產(chǎn)品也做了一段時(shí)間了,但自己仍然一直感覺(jué)到在發(fā)揮插件化系統(tǒng)的優(yōu)勢(shì)方面還有不小差距, RCP 可以看做是基于 OSGi 做插件化應(yīng)用系統(tǒng)的最佳實(shí)踐,其中的不少設(shè)計(jì)方法甚至都可以整理成為基于 OSGi 做插件化應(yīng)用系統(tǒng)的設(shè)計(jì)模式,讓我們進(jìn)入 RCP 之旅,揭開(kāi)面紗,一探其本質(zhì)吧,相信大家在了解了 RCP 的設(shè)計(jì)思想,看過(guò)其代碼后,不得不對(duì) RCP 表示崇高的敬意,大師之作,不同凡響。

    致敬理由一:即插即用 / 即刪即無(wú)的設(shè)計(jì) / 實(shí)現(xiàn)指導(dǎo)

    在構(gòu)建插件化的應(yīng)用系統(tǒng)的時(shí)候,我們通常希望做到以下三點(diǎn):

    1.???????? 通過(guò)增加插件來(lái)動(dòng)態(tài)擴(kuò)展系統(tǒng)功能,包括功能的入口等,最重要的就是不要因?yàn)樵黾拥男碌牟寮鴮?dǎo)致對(duì)原插件的修改,做到即插即用, OSGi 本身提供了基于插件動(dòng)態(tài)擴(kuò)展系統(tǒng)功能的支持,但是否可以真的做到即插即用,是否可以不導(dǎo)致對(duì)原插件的修改,這個(gè)還是要看設(shè)計(jì)者的功力;

    2.???????? 通過(guò)刪除插件來(lái)動(dòng)態(tài)移除系統(tǒng)功能,包括功能的入口等,最重要的就是要讓插件的卸載不影響到系統(tǒng)的運(yùn)行,這個(gè)和 1 里面所說(shuō)的情況也是一樣的, OSGi 是可以支持這樣的要求,但應(yīng)用系統(tǒng)是否能做到還是看設(shè)計(jì)者的功力;

    3.???????? 通過(guò)增加或更新插件來(lái)動(dòng)態(tài)改變系統(tǒng)行為。

    RCP 呢,通過(guò)基于 OSGi 來(lái)保證其插件化以及動(dòng)態(tài)化可實(shí)現(xiàn)的情況下,還定義了擴(kuò)展點(diǎn)的機(jī)制,而正是因?yàn)閿U(kuò)展點(diǎn)的機(jī)制,使得 RCP 在設(shè)計(jì)角度能夠更好的達(dá)到了我們構(gòu)建插件化應(yīng)用系統(tǒng)的前兩個(gè)目標(biāo),同時(shí) RCP 通過(guò)其對(duì)桌面應(yīng)用支撐的設(shè)計(jì)為我們展示了擴(kuò)展點(diǎn)的最佳實(shí)踐方法,將界面按照對(duì)象的思想進(jìn)行劃分,在劃分的過(guò)程中根據(jù)職責(zé)形成插件,暴露出擴(kuò)展點(diǎn),最后形成了象樹(shù)一樣的結(jié)構(gòu)體系,如圖所示:

    image.jpg
    圖表
    1 RCP 結(jié)構(gòu)示意圖

    這種設(shè)計(jì)方法最佳的一個(gè)地方就在于充分的做到了真正的即插即用、即刪即無(wú)的情況,典型的例子就是在 RCP 中可以通過(guò)擴(kuò)展實(shí)現(xiàn) Perspective ,將這個(gè)插件安裝上后就可以在 RCP 中看到這個(gè) Perspective ,刪除這個(gè)插件后 RCP 中自然就看不到這個(gè) Perspective 了。

    RCP 的結(jié)構(gòu)體系上,可以看出 RCP 在基于擴(kuò)展點(diǎn)的設(shè)計(jì)思想上是怎么去設(shè)計(jì)的,它的設(shè)計(jì)思路采取的就是從頂至下、按照職責(zé)進(jìn)行劃分、形成插件的方法,插件中需要支持動(dòng)態(tài)擴(kuò)展的部分則做成擴(kuò)展點(diǎn),從而形成一個(gè)非常容易擴(kuò)展的開(kāi)發(fā)平臺(tái)。

    這對(duì)于 B/S 系統(tǒng)的設(shè)計(jì)有什么指導(dǎo)的地方呢?至少在我自己目前的基于 OSGi 的產(chǎn)品的 B/S 部分上,我承認(rèn)并沒(méi)有做到真正的即插即用、即刪即無(wú),在安裝一個(gè)插件后其菜單的鏈接需要手工的加上、在刪除一個(gè)插件后其菜單的鏈接也需要手工的刪除,而模塊內(nèi)的按鈕呀等等元素,也是同樣如此,并沒(méi)有做到說(shuō)增加一個(gè)插件,模塊內(nèi)的按鈕就可以自動(dòng)增加這樣的情況,而這呢,其實(shí)一定程度上就削弱了插件化帶來(lái)的好處, :) ,當(dāng)然,這里的例子說(shuō)的有些極端了,并不是每個(gè)按鈕、每個(gè)界面都要追求完全的插件化的,但這種設(shè)計(jì)思想是非常有用的,系統(tǒng)中需要支持插件化的地方多著呢,在這樣的場(chǎng)景下 RCP 就提供了實(shí)現(xiàn)的設(shè)計(jì)思想和參考了,而且這種設(shè)計(jì)思想還可以延伸到后臺(tái)模塊部分,來(lái)看看參考 RCP 使用擴(kuò)展點(diǎn)的方式來(lái)改造下 B/S 系統(tǒng)的設(shè)計(jì)方法。

    先來(lái)看看界面部分,界面怎么樣去設(shè)計(jì),使其能夠支撐插件的即插即用、即刪即無(wú)這也是非常關(guān)鍵的,這個(gè)部分幾乎是完全可以參考 RCP 的設(shè)計(jì),但要考慮 B/S 系統(tǒng)的特殊性,例如 B/S 系統(tǒng)在界面展現(xiàn)上采用 Html 這樣的方式顯然更為適合,在這樣的設(shè)計(jì)的情況下, B/S 系統(tǒng)界面中的公用菜單、按鈕等部分就可以由各模塊的插件擴(kuò)展來(lái)構(gòu)成了,而當(dāng)插件卸載時(shí),這些公用菜單、按鈕中的東西自然就沒(méi)有了,而對(duì)于模塊內(nèi)的元素也需要考慮采取類(lèi)似的設(shè)計(jì),把握住設(shè)計(jì)原則就行了,需要支持動(dòng)態(tài)擴(kuò)展的部分就做成擴(kuò)展點(diǎn), Eclipse 對(duì)于這種擴(kuò)展稱(chēng)為貢獻(xiàn),這個(gè)名詞取的實(shí)在是太好了。

    再來(lái)看看后臺(tái)模塊部分,后臺(tái)模塊部分之前一直說(shuō)的在 OSGi 中采用 Hibernate 比較的麻煩,只能采用將所有模塊的 po 都放入同一個(gè) Bundle 的折衷方案,而其實(shí)采用類(lèi)似擴(kuò)展點(diǎn)的設(shè)計(jì)方法的話(huà),就可以實(shí)現(xiàn)各 PO 放入各模塊自己的 Bundle 中了,這個(gè)我會(huì)通過(guò) demo 的方式來(lái)進(jìn)行說(shuō)明,其實(shí)這樣的方法同樣可以衍生到 webwork 那些中去,讓這些傳統(tǒng)的開(kāi)源的東西都能夠支撐插件化。

    從這個(gè)方面來(lái)看, RCP 的擴(kuò)展點(diǎn)的設(shè)計(jì)思想為實(shí)現(xiàn)即插即用、即刪即無(wú)提供了可行的設(shè)計(jì)方式,同時(shí)它的實(shí)現(xiàn)方法更是為我們?nèi)绾尾捎脭U(kuò)展點(diǎn)機(jī)制來(lái)實(shí)現(xiàn)這個(gè)提供了指導(dǎo),在這里呢,也要糾正了下自己以前對(duì)于 RCP 的擴(kuò)展點(diǎn)的看法,盡管擴(kuò)展點(diǎn)的實(shí)現(xiàn)確實(shí)可以基于 OSGi service 的方式來(lái)實(shí)現(xiàn),但在很多場(chǎng)景下確實(shí)不如 RCP 本身的擴(kuò)展點(diǎn)機(jī)制好用,例如在幫助視圖中,就是一個(gè)典型的場(chǎng)景,因?yàn)槟侵皇翘鎿Q了一個(gè)幫助的文本信息和圖片而已,根本用不著去寫(xiě)類(lèi)來(lái)實(shí)現(xiàn),這點(diǎn)上來(lái)說(shuō)擴(kuò)展點(diǎn)的機(jī)制還是非常好用的, Equinox 中現(xiàn)在也有擴(kuò)展點(diǎn)這個(gè)插件,還是比較爽的, J

    即插即用、即刪即無(wú)的支持使得系統(tǒng)可以很好的以插件的方式來(lái)進(jìn)行組裝,做系統(tǒng)的時(shí)候就象在種樹(shù),先把系統(tǒng)的根撒下,讓根長(zhǎng)出主干,在主干上培育出枝葉,枝葉上結(jié)點(diǎn)果實(shí),整顆樹(shù)就這么養(yǎng)成了,當(dāng)不需要了某個(gè)果實(shí)的時(shí)候,把它摘下來(lái)吃了,當(dāng)不需要了某顆枝葉的時(shí)候,把那顆枝葉砍了,而這都不會(huì)影響到主干,當(dāng)希望樹(shù)上形成別的果實(shí)的時(shí)候,甚至都可以接上個(gè)不同的枝葉,讓它長(zhǎng)出不一樣的果實(shí),比普通樹(shù)強(qiáng)多了,改名成高科技樹(shù)算了, J

    ?b-5-01.jpg

    致敬理由二:動(dòng)態(tài)的選擇插件來(lái)形成功能 / 界面

    擴(kuò)展插件是一個(gè)需要支持的方面,但怎么樣根據(jù)時(shí)機(jī)來(lái)選擇合適的插件呢,這個(gè)問(wèn)題顯然就是在支持?jǐn)U展插件后的一個(gè)更重要的問(wèn)題了,為什么這么說(shuō)呢,一個(gè)典型的場(chǎng)景如下:

    系統(tǒng)中幾個(gè)插件都擴(kuò)展提供了右鍵彈出的菜單,在運(yùn)行的過(guò)程中,肯定是希望插件只彈出自己的那部分?jǐn)U展的菜單,而不會(huì)希望什么菜單都出現(xiàn),這呢,就需要?jiǎng)討B(tài)的去選擇插件來(lái)形成菜單,在 RCP 中這塊的設(shè)計(jì)采用的是在擴(kuò)展點(diǎn)中增加標(biāo)識(shí)的方式,這樣的話(huà)在獲取擴(kuò)展點(diǎn)實(shí)現(xiàn)的時(shí)候就可以通過(guò)獲取相應(yīng)的標(biāo)識(shí)來(lái)進(jìn)行過(guò)濾,這個(gè)功能呢,和 OSGi 中支持 service 的過(guò)濾是一樣的,雖然這不屬于 RCP 的創(chuàng)意,但這也是一個(gè)實(shí)踐的不錯(cuò)的指導(dǎo)。

    在形成界面方面 RCP 采用了同樣的方法,例如在一個(gè)屬性窗口中,系統(tǒng)可以自動(dòng)的根據(jù)其中字段擴(kuò)展點(diǎn)的實(shí)現(xiàn)加上標(biāo)識(shí)的過(guò)濾來(lái)組裝出不同的界面,把這個(gè)設(shè)計(jì)思想引入到 B/S 界面的自動(dòng)生成上是不是也是個(gè)不錯(cuò)的思想呢, J

    ?

    目前對(duì) RCP 了解還不是非常的多,設(shè)計(jì)角度而言最讓我心動(dòng)的就是上面的兩個(gè)理由,但其實(shí) RCP 還提供了非常多的細(xì)節(jié)的可參考的東西,那都是非常值得學(xué)習(xí)的, RCP 的代碼非常的值得一讀,相信大家在讀了后都會(huì)覺(jué)得不亞于一頓大餐美食,希望大家多多挖掘,共同分享這頓難得的美食。

    posted on 2007-01-15 22:32 BlueDavy 閱讀(4033) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): OSGi、SOA、SCA

    評(píng)論

    # re: 向RCP致敬[未登錄](méi) 2007-01-16 09:59 BeanSoft

    但是不管怎么說(shuō), Java 的 GUI 開(kāi)發(fā)始終沒(méi)有達(dá)到 VB, Delphi 等的 RAD 目的, 簡(jiǎn)單說(shuō)就是對(duì)開(kāi)發(fā)人員來(lái)說(shuō), 太復(fù)雜了. 寫(xiě)這么多 Plugin, 照樣還是很累.  回復(fù)  更多評(píng)論   

    # re: 向RCP致敬 2007-01-16 10:26 BlueDavy

    @BeanSoft
    :),嗯,那是,這個(gè)我在文中的開(kāi)頭就說(shuō)到了...
    RAD方面Eclipse確實(shí)還需要繼續(xù)努力,那樣才能讓基于Java的桌面應(yīng)用開(kāi)發(fā)增多..
      回復(fù)  更多評(píng)論   

    # re: 向RCP致敬 2007-01-16 21:48 Flyingis

    @BeanSoft
    簡(jiǎn)單帶來(lái)的是易用,但可操作性較差,比較死板,個(gè)人還是比較喜歡Java的中庸之道。  回復(fù)  更多評(píng)論   

    # re: 向RCP致敬 2007-01-17 11:31 leon

    NetBean也不錯(cuò),怎么沒(méi)人寫(xiě)寫(xiě)NetBeans上的RCP開(kāi)發(fā).  回復(fù)  更多評(píng)論   

    # re: 向RCP致敬 2007-01-18 22:26 呂品

    @BeanSoft
    我覺(jué)得,就算對(duì)于開(kāi)發(fā)人員來(lái)說(shuō)復(fù)雜了,但是只要你的產(chǎn)品有很好的用戶(hù)體驗(yàn),那就是值得的.總不能想躺在床上就研制原子彈吧.  回復(fù)  更多評(píng)論   

    # re: 向RCP致敬 2009-02-08 10:12 dongle

    一個(gè)屬性窗口中,系統(tǒng)可以自動(dòng)的根據(jù)其中字段擴(kuò)展點(diǎn)的實(shí)現(xiàn)加上標(biāo)識(shí)的過(guò)濾來(lái)組裝出不同的界面,把這個(gè)設(shè)計(jì)思想引入到 B/S 界面的自動(dòng)生成上是不是也是個(gè)不錯(cuò)的思想呢, J 。

    我們現(xiàn)在也需要做一個(gè)類(lèi)型利用屬性文件自動(dòng)生成編輯界面的功能,可是一直沒(méi)有發(fā)現(xiàn)eclipse里面是怎么做到的?lz能不能指點(diǎn)一下,eclipse在這里使用了什么技術(shù)實(shí)現(xiàn)的這個(gè)設(shè)計(jì)思想?  回復(fù)  更多評(píng)論   

    公告

     









    feedsky
    抓蝦
    google reader
    鮮果

    導(dǎo)航

    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    統(tǒng)計(jì)

    隨筆分類(lèi)

    隨筆檔案

    文章檔案

    Blogger's

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲明星合成图综合区在线| 黄色成人免费网站| 亚洲AV日韩AV永久无码色欲 | 亚洲AV日韩AV永久无码色欲| 亚洲精品乱码久久久久久下载| 国产午夜亚洲精品午夜鲁丝片| 免费观看美女裸体网站| xx视频在线永久免费观看| 免费一区二区无码东京热| 深夜久久AAAAA级毛片免费看| 亚洲熟女综合一区二区三区| 亚洲最大视频网站| 久久亚洲精品国产精品黑人| 在线日韩日本国产亚洲| 亚洲Av无码国产情品久久| 国产美女被遭强高潮免费网站| 成年美女黄网站18禁免费| 无码精品A∨在线观看免费| 1000部无遮挡拍拍拍免费视频观看 | 全部在线播放免费毛片| 亚洲爆乳大丰满无码专区| 中文字幕亚洲综合小综合在线 | 99麻豆久久久国产精品免费| 一级做a爱片特黄在线观看免费看| 久久亚洲精品成人无码| 亚洲JLZZJLZZ少妇| 亚洲av日韩综合一区二区三区| 亚洲色最新高清av网站| 亚洲乱码国产乱码精华| 亚洲色成人网站WWW永久四虎| 亚洲精品综合在线影院| 亚洲国产日韩综合久久精品| 亚洲高清有码中文字| 久久国产亚洲精品| 亚洲Av永久无码精品黑人| 久久综合亚洲色hezyo| 青草青草视频2免费观看| 九一在线完整视频免费观看| 久久精品免费网站网| 99麻豆久久久国产精品免费| 免费看又黄又无码的网站|