思考插件架構(gòu)體系
插件架構(gòu)體系是我一直就非常關(guān)注的內(nèi)容,其實(shí)插件架構(gòu)體系的發(fā)展已經(jīng)有很久的背景了,插件架構(gòu)體系的優(yōu)點(diǎn)我們也是能看的非常明顯,象硬件一樣的即插即用、無(wú)論對(duì)于公司還是業(yè)界而言的良好的積累方式、為公司或業(yè)界提供統(tǒng)一而規(guī)范的開發(fā)方式以及穩(wěn)定的內(nèi)核架構(gòu)等等,這些優(yōu)點(diǎn)無(wú)論對(duì)于公司還是業(yè)界來(lái)說(shuō)都是非常重要的。
插件架構(gòu)體系基本的一個(gè)概念就是基于松散的模塊積累方式,通過(guò)新增插件以及擴(kuò)展原有插件的方法來(lái)完成系統(tǒng)的實(shí)現(xiàn),凡事有利必有弊,在看到插件架構(gòu)體系的這些優(yōu)點(diǎn)的同時(shí),在實(shí)現(xiàn)和使用插件架構(gòu)體系的時(shí)候仍然會(huì)碰到不少的問題,我大概的整理了一下,主要有:
1、插件的定義
插件的定義可謂是插件架構(gòu)體系在使用時(shí)會(huì)碰到的最大的問題,首先要解決的問題就是何謂插件、插件如何去定義?何謂插件這個(gè)大家的看法都會(huì)有所不同,由于對(duì)于何謂插件的看法不同,必然就導(dǎo)致了在整個(gè)系統(tǒng)的設(shè)計(jì)時(shí)采用了不同的設(shè)計(jì)方式,主要是在插件的粒度控制上會(huì)有不同的設(shè)計(jì)方式。
個(gè)人覺得也許采用模塊作為插件是一種可行的方案,采用模塊作為插件的核心思想是按一種從頂至下的設(shè)計(jì)理念,也就是架構(gòu)設(shè)計(jì)中產(chǎn)生的模塊視圖首先作為系統(tǒng)的插件構(gòu)成視圖,根據(jù)對(duì)模塊的詳細(xì)設(shè)計(jì)此時(shí)又可對(duì)模塊的插件進(jìn)行細(xì)一步的劃分,或者是將插件劃的更細(xì),或者是采用插件的擴(kuò)展機(jī)制去實(shí)現(xiàn)。
插件的定義則是帶來(lái)了一些設(shè)計(jì)上的難度的,我仍然覺得需要將插件視為黑盒去看,插件需要提供什么樣的功能、插件需要什么樣的運(yùn)行環(huán)境、插件需要暴露哪些包等等,這個(gè)在Osgi中都有相應(yīng)的映射,在基于插件架構(gòu)體系進(jìn)行系統(tǒng)構(gòu)建的時(shí)候插件的粒度、定義我覺得這是最難把握的,甚至覺得難度上會(huì)超過(guò)以前的模塊設(shè)計(jì),需要的是更為規(guī)范的模塊式的設(shè)計(jì),覺得這個(gè)在中小型軟件企業(yè)中往往是很難做到的,主要仍然是架構(gòu)設(shè)計(jì)時(shí)的控制,在設(shè)計(jì)時(shí)重要的因素在于保持系統(tǒng)的松散結(jié)構(gòu),至于概要設(shè)計(jì)時(shí)則完全可按照架構(gòu)設(shè)計(jì)的約束去進(jìn)行,詳細(xì)設(shè)計(jì)則完全和平時(shí)的做法一樣。
2、插件的依賴
插件的依賴主要有兩種,一是對(duì)于系統(tǒng)已有插件的依賴,另一方面則是對(duì)于外部jar包的依賴。這都是在設(shè)計(jì)時(shí)需要做出考慮的,對(duì)于插件架構(gòu)體系而言對(duì)已有插件的依賴和對(duì)外部jar包的依賴這個(gè)差別就比較大了,其實(shí)這個(gè)在設(shè)計(jì)上還好辦,因?yàn)榭梢酝ㄟ^(guò)重構(gòu),本來(lái)一直依賴覺得最困難的是對(duì)其他插件的依賴怎么辦,難道要去引用其他plugin的lib,在eclipse ide中是解決了這個(gè)問題的,所以現(xiàn)在來(lái)說(shuō)插件的依賴在插件體系架構(gòu)中就顯得沒那么困難了,這說(shuō)明插件的依賴的解決依賴于一個(gè)良好的插件開發(fā)IDE。
3、插件的測(cè)試
插件的測(cè)試我這指的不是運(yùn)行的功能測(cè)試,而是單元測(cè)試,感覺這個(gè)在現(xiàn)在的插件架構(gòu)體系里還是比較困難的,因?yàn)樵谝环N松耦合的架構(gòu)體系中,對(duì)于其他插件的依賴是要在容器運(yùn)行期才能夠獲取的,覺得這個(gè)有點(diǎn)變成了當(dāng)時(shí)ejb container的問題,現(xiàn)在好像得通過(guò)mock以及其他的方法去解決,另外一個(gè)也許是IoC的策略?這方面需要進(jìn)一步思考,
4、插件的調(diào)試
插件的調(diào)試主要是依賴容器的調(diào)試,現(xiàn)在的eclipse ide已經(jīng)支持插件的調(diào)試,并且好像是支持插件的遠(yuǎn)程調(diào)試的。
5、插件開發(fā)學(xué)習(xí)的門檻
就目前來(lái)說(shuō)插件開發(fā)學(xué)習(xí)的門檻并不算低的,個(gè)人覺得至少要對(duì)插件體系架構(gòu)有一定的了解(例如基于Osgi的插件框架,那就要求對(duì)OSGI有一定的熟悉),但相對(duì)這個(gè)門檻而言,其獲得的價(jià)值是值得的。
其實(shí)講了這么些問題,集中的主要在于基于插件架構(gòu)體系的應(yīng)用框架以及業(yè)務(wù)系統(tǒng)的設(shè)計(jì)方式將和以前的會(huì)有些變化,這個(gè)也是可以理解的,畢竟是受技術(shù)架構(gòu)約束的,另外一方面則主要集中在插件開發(fā)的簡(jiǎn)易性和質(zhì)量的保證,這個(gè)就得依靠一個(gè)強(qiáng)大的插件開發(fā)IDE。
posted on 2005-11-15 11:09 BlueDavy 閱讀(7120) 評(píng)論(10) 編輯 收藏 所屬分類: Plugin Architecture 、系統(tǒng)設(shè)計(jì)