構(gòu)建自己的C/C++插件開(kāi)發(fā)框架(一)——初步設(shè)想
Posted on 2009-10-12 20:16 常高偉 閱讀(2433) 評(píng)論(0) 編輯 收藏 所屬分類: 插件框架最近一直在學(xué)習(xí)OSGI方面的知識(shí)。買了一本《OSGI原理和最佳實(shí)踐》,可是還沒(méi)有到。遺憾的是,OSGI目前的幾個(gè)開(kāi)源框架只支持Java,對(duì)C和C++都不支持的。可惜我們公司目前主要的開(kāi)發(fā)語(yǔ)言還是c和c++,即便是引進(jìn)OSGI,所得的好處范圍有限。而我對(duì)松散耦合的模塊化開(kāi)發(fā)向往已久。查了一下OSGI對(duì)C++支持的好像是有一個(gè)開(kāi)源項(xiàng)目,不過(guò)好像應(yīng)用范圍很小。而SCA標(biāo)準(zhǔn)中是有對(duì)C++實(shí)現(xiàn)模型的支持的,但是幾個(gè)開(kāi)源的框架目前還只支持JAVA。
昨天看了丁亮的轉(zhuǎn)載的一篇博客《C/C++:構(gòu)建你自己的插件框架 》,原文的鏈接:http://blog.chinaunix.net/u/12783/showart_662937.html 。看了一下里面講的方法,自己倒是可以實(shí)現(xiàn)。所以有了構(gòu)建自己的c/c++插件開(kāi)發(fā)框架的想法。今天先寫一下初步的設(shè)想。
C/C++插件開(kāi)發(fā)框架的要素
BlueDavy有一篇介紹服務(wù)框架要素的文章(鏈接:http://www.aygfsteel.com/BlueDavy/archive/2009/08/28/172259.html )。我的插件框架也要考慮、解決以下的幾個(gè)問(wèn)題:
1、如何注冊(cè)插件;
2、如何調(diào)用插件;
3、如何測(cè)試插件;
4、插件的生命周期管理;
5、插件的管理和維護(hù);
6、插件的組裝;
7、插件的出錯(cuò)處理;
8、服務(wù)事件的廣播和訂閱(這個(gè)目前還沒(méi)有考慮要支持);
其中有幾個(gè)點(diǎn)很重要:1)插件框架要能夠使模塊松散耦合,做到真正的面向接口編程;2)框架要支持自動(dòng)化測(cè)試:包括單元測(cè)試,集成測(cè)試;3)簡(jiǎn)化部署;4)支持分布式,模塊可以調(diào)用框架外的插件。
采用的技術(shù)
插件框架要解決的一個(gè)問(wèn)題就是插件的動(dòng)態(tài)加載能力。這里可以使用共享庫(kù)的動(dòng)態(tài)加載技術(shù)。當(dāng)然,為了簡(jiǎn)單,第一步只考慮做一個(gè)linux下的插件框架。
總體結(jié)構(gòu)
框架的總體結(jié)構(gòu)上,參考OSGI的“微內(nèi)核+系統(tǒng)插件+應(yīng)用插件”結(jié)構(gòu)。這里要好好考慮一下把什么做在內(nèi)核中。關(guān)于微內(nèi)核結(jié)構(gòu),以前我做個(gè)一個(gè)微內(nèi)核流程引擎,會(huì)在后面有時(shí)間和大家分享。
框架中模塊間的數(shù)據(jù)傳送,有兩種解決方法:一是普元采用的XML數(shù)據(jù)總線的做法。優(yōu)點(diǎn)是擴(kuò)展性好,可讀性好。但是速度有些慢。二是采用我熟悉的信元流。優(yōu)點(diǎn)的效率高,訪問(wèn)方便,但是可讀性差一點(diǎn),另外跨框架的數(shù)據(jù)傳送,需要考慮網(wǎng)絡(luò)字節(jié)序的問(wèn)題。
對(duì)于框架間的通信,通過(guò)系統(tǒng)插件封裝,對(duì)應(yīng)用插件隱藏通信細(xì)節(jié)。
部署
努力做到一鍵式部署。