Plugin Architecture簡(jiǎn)述

          概述
          Plugin Architecture,無(wú)疑是如今軟件界最為熱門(mén)的名詞,在各種各樣的解決方案、白皮書(shū)中經(jīng)常都能

          看到即插即用這么幾個(gè)字,但真的又有多少軟件做到了呢,當(dāng)然,不可否認(rèn)的是也有部分的軟件確實(shí)做到

          了,而且做的很好,例如Eclipse,知名的插件式系統(tǒng),還有象maven這些都是,其實(shí)portlet container

          那些也都是的,列舉出來(lái)還真的有不少。插件式系統(tǒng)帶來(lái)的好處很明顯,最大程度的重用,為快速的搭建

          系統(tǒng)提供幫助,潛在的好處在于要求系統(tǒng)以插件式的方式進(jìn)行設(shè)計(jì),幫助你更好的做到模塊化的劃分以及

          幫助系統(tǒng)達(dá)到良好的封裝性。

          需求
          要做Plugin Architecture,首先需要做的是如何考慮Plugin,其實(shí)也就是需求,要看你是怎么看待一個(gè)

          Plugin的,認(rèn)為一個(gè)Plugin應(yīng)該是怎么樣的,認(rèn)為Plugin是怎么樣被組裝起來(lái)構(gòu)成系統(tǒng)的,這個(gè)時(shí)候需要

          的是大家從需求的角度來(lái)提出要求,不要從技術(shù)角度來(lái)提。一個(gè)系統(tǒng)既然是按照Plugin的方式搭建出來(lái),

          那么首先需要知道的是就是Plugin能提供什么樣的功能,這些功能需要什么參數(shù),這是最基本的,其次是

          如何去管理這個(gè)Plugin,包括修改它的配置參數(shù),對(duì)它的生命周期進(jìn)行管理(啟動(dòng)/暫停/停止等),這是以

          單獨(dú)的Plugin角度來(lái)看,如果這個(gè)Plugin又得調(diào)用其他Plugin提供的功能,那么應(yīng)該怎么去做,考慮了這

          些后又會(huì)想到Plugin應(yīng)該怎么去部署、怎么去自動(dòng)升級(jí)。從擴(kuò)展方面我們又會(huì)考慮到那么我要如何去擴(kuò)展

          一個(gè)Plugin呢,這也是很關(guān)鍵的。這都只是簡(jiǎn)簡(jiǎn)單單的提了一些Plugin的需求,歸納上面的需求可以得出

          主要的幾點(diǎn)就是Plugin的功能的暴露、Plugin的管理、Plugin的調(diào)用、Plugin之間的協(xié)作、Plugin的部署

          、Plugin的擴(kuò)展這幾個(gè)大的方面。

          技術(shù)簡(jiǎn)介
          現(xiàn)有的可參考的Plugin Architecture還是有比較多的,例如Eclipse、Geronimo、Maven、Pluto等等,這

          些都是做的比較好的插件式的系統(tǒng),在這里主要講講Eclipse如今使用的Osgi和Geronimo所使用的JMX+IoC

          方式實(shí)現(xiàn)的Plugin Architecture,應(yīng)該說(shuō)兩者各有千秋,重點(diǎn)還是看對(duì)于Plugin的需求到底是怎么樣的

          ,Osgi規(guī)范將系統(tǒng)按照Bundle的方法進(jìn)行組裝,每個(gè)Bundle下包含了一系列的Service,通過(guò)編寫(xiě)B(tài)undle

          完成對(duì)于Bundle的管理(Start、Stop),而Service則為Bundle所能提供對(duì)外的功能,通過(guò)MANIFEST.MF這

          個(gè)標(biāo)準(zhǔn)的jar包描述文件來(lái)描述bundle所能提供的功能以及一些元數(shù)據(jù)信息,由于對(duì)Osgi研究不深,也只

          能大概的提提這些了,Eclipse在3.0以后的版本開(kāi)始采用Osgi,并兼容其原有的Plugin方式,可以通過(guò)閱

          讀Eclipse源碼去了解關(guān)于基于Osgi來(lái)實(shí)現(xiàn)Plugin Architecture的方式,Eclipse是基本實(shí)現(xiàn)了上述需求

          部分的,不過(guò)個(gè)人認(rèn)為在plugin的管理、plugin之間的協(xié)作、plugin的部署上還可以加強(qiáng);接下來(lái)提提

          JMX+IoC方式,對(duì)JMX稍有了解的人都知道JMX被大量的應(yīng)用服務(wù)器所使用,如Jboss、Tomcat、Weblogic、

          WebSphere等等,數(shù)不勝數(shù),JMX強(qiáng)調(diào)的是一個(gè)管理概念,對(duì)JMX不在此詳細(xì)的介紹,但其實(shí)它同樣是一個(gè)

          Plugin的概念,依照J(rèn)MX系統(tǒng)可以編寫(xiě)MBean的方式來(lái)暴露Plugin的功能,并實(shí)現(xiàn)對(duì)于Plugin的管理(各種

          方式,http、rmi等等)、Plugin的調(diào)用、Plugin的部署,那么為什么要引入IoC呢,IoC幫助實(shí)現(xiàn)Plugin之

          間的協(xié)作,并且是通過(guò)注入的方式來(lái)實(shí)現(xiàn),IoC也不在這里詳細(xì)的去描述了。

          總結(jié)
          通過(guò)對(duì)上面兩種實(shí)現(xiàn)Plugin Architecture的簡(jiǎn)介,分別都實(shí)現(xiàn)了需求中的內(nèi)容,但都有提升的余地,個(gè)

          人認(rèn)為Osgi的方式需提升對(duì)于Plugin管理的關(guān)注(不僅是生命周期管理)、而JMX+IoC方式則需提高對(duì)于

          Plugin內(nèi)部結(jié)構(gòu)的關(guān)注(就象Osgi將Plugin分解為了Bundle和Service),至于Plugin的擴(kuò)展方面覺(jué)得

          Eclipse的Extension Point是非常不錯(cuò)的一個(gè)設(shè)計(jì),不過(guò)同時(shí)也看出在Plugin Architecture的實(shí)現(xiàn)上基

          本都采用了管理和靜態(tài)結(jié)構(gòu)分離的方法,其實(shí)這個(gè)好處是非常明顯的,可以快速的將系統(tǒng)原有的模塊通過(guò)

          編寫(xiě)一個(gè)管理類(lèi)的方法就可作為plugin放入系統(tǒng)中,這提升了簡(jiǎn)便性,當(dāng)然最大的作用還是分清了職責(zé),

          說(shuō)一句題外話(huà),職責(zé)單一一直是軟件設(shè)計(jì)的重中之重,此文純屬拋磚引玉,希望能聽(tīng)到更多關(guān)于Plugin

          Architecture的聲音,也希望大家都關(guān)注Plugin Architecture,最近也出了一個(gè)JPF,不知道大家是否有

          所了解。

          posted on 2005-06-30 11:02 BlueDavy 閱讀(3229) 評(píng)論(6)  編輯  收藏 所屬分類(lèi): Plugin Architecture

          評(píng)論

          # re: Plugin Architecture簡(jiǎn)述 2005-06-30 11:11 地獄男爵

          頂, 不知道能否在詳細(xì)講講.  回復(fù)  更多評(píng)論   

          # re: Plugin Architecture簡(jiǎn)述 2005-06-30 11:29 emu

          還是講講具體的實(shí)現(xiàn)吧。這樣一通理論說(shuō)的我似懂非懂的。  回復(fù)  更多評(píng)論   

          # re: Plugin Architecture簡(jiǎn)述 2005-07-13 16:04 airlink

          google過(guò)來(lái)的。:)
          概括得很好,受益匪淺,多謝。


            回復(fù)  更多評(píng)論   

          # re: Plugin Architecture簡(jiǎn)述 2005-08-23 10:52 煩人

          <<Notes on the Eclipse Plug-in Architecture>>很不錯(cuò)。
          網(wǎng)上可以檢索到。值得一讀。

          另外,像簡(jiǎn)述這樣的東抄西抄組合出來(lái)得破文章就不要發(fā)了。多談?wù)勛约旱睦斫猓?

          哪怕是錯(cuò)的,也比這樣的破文章好。

          學(xué)習(xí)+錯(cuò)誤+討論--〉進(jìn)步  回復(fù)  更多評(píng)論   

          # re: Plugin Architecture簡(jiǎn)述 2005-08-23 15:21 Programmer's Life

          請(qǐng)問(wèn)這篇文章哪里是東抄西抄出來(lái)的?
          有什么見(jiàn)解請(qǐng)直接說(shuō),不要說(shuō)這些沒(méi)用的廢話(huà)  回復(fù)  更多評(píng)論   

          # re: Plugin Architecture簡(jiǎn)述 2006-06-12 11:23 綠色使者、綠色心情

          總結(jié)的挺好的啊,學(xué)習(xí)中  回復(fù)  更多評(píng)論   

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導(dǎo)航

          <2005年6月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          統(tǒng)計(jì)

          隨筆分類(lèi)

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 定结县| 临湘市| 诸暨市| 辽阳县| 峨眉山市| 六安市| 岳普湖县| 永定县| 兴业县| 云霄县| 孟州市| 比如县| 武乡县| 龙海市| 汉源县| 石首市| 仁布县| 东源县| 特克斯县| 延川县| 滦南县| 巨鹿县| 巩留县| 苍溪县| 十堰市| 金川县| 平遥县| 易门县| 左权县| 凤山县| 杭锦旗| 文山县| 昆山市| 昌江| 桐城市| 海阳市| 资溪县| 河池市| 衡山县| 象州县| 崇州市|