X3CC++輕量級通用插件框架平臺
X3 C++ PluginFramework 代號為X3的C++輕量級通用插件框架平臺是一套通用的C++輕量級插件體系,沒有使用MFC、ATL、COM??稍赪indows和Linux下編譯運(yùn)行。應(yīng)用程序可以基于X3插件框架進(jìn)行快速開發(fā),X3插件框架中的插件既可以單獨(dú)使用,又可以靈活組合使用。X3插件框架已經(jīng)過3年十幾個系統(tǒng)的實際使用驗證。
目前X3插件框架包括插件內(nèi)核部分(插件基礎(chǔ)、插件管理器、Observer管理器插件、日志管理器插件)和實用技術(shù)插件(XML讀寫封裝插件、數(shù)據(jù)庫操作封裝插件、文件操作實用插件、文本操作實用插件、本地化字符串表插件等)。
Windows/Linux編譯運(yùn)行環(huán)境
本插件機(jī)制采用C++實現(xiàn),用到了C++的RTTI機(jī)制和少量Windows API函數(shù),沒有使用MFC、ATL、STL,沒有使用LIB文件,外部依賴文件少,沒有使用VC++特殊編譯指令。
編譯環(huán)境為
1、Visual C++ 6.0/2003/2005/2008/2010,Windows
2、MinGW GCC + Code::Blocks(IDE),Windows
3、Linux GCC + Code::Blocks(IDE),Windows
4、Linux GCC + Makefile
X3插件框架的特點有:
a) 接口定義簡單靈活
采用普通的C++接口,即由純虛函數(shù)組成的結(jié)構(gòu)體,不需要特殊的基類,不需要宏和UUID申明;同時可以使用C++的各種變量類型,不受COM接口那樣的約束。例如下面的接口Ix_定義:
interface Ix_Example
{
virtual void Foo() = 0;
virtual void* GetData(std::vector& items) = 0;
};
b) 接口與實現(xiàn)分離
對外提供接口文件,在插件內(nèi)部用類來實現(xiàn)一個或多個接口,不需要對外導(dǎo)出該類或暴露實現(xiàn)細(xì)節(jié)。這樣還有一個好處是只有約定了接口就可以讓多個模塊并行開發(fā),模塊相互之間不存在編譯依賴(不需要其他插件的LIB等文件),這可用于測試驅(qū)動開發(fā)模式。
c) 多接口轉(zhuǎn)換、引用計數(shù)管理
采用智能指針類來管理接口的引用計數(shù)及生命期,可從一個接口動態(tài)轉(zhuǎn)換為另一個接口(內(nèi)部采用C++的RTTI機(jī)制動態(tài)轉(zhuǎn)換),可以區(qū)分插件內(nèi)部的接口引用和插件外部的接口引用。
d) 模塊透明部署
一個模塊只需要使用其他模塊的接口,不需要關(guān)心該接口是在哪個插件中實現(xiàn)的。可以根據(jù)需要將各個實現(xiàn)類進(jìn)行合并或拆分,使其分布到不同插件中,而接口使用者不受影響。另外,插件部署于哪個目錄也不影響插件接口的使用。
e) 模塊可替換、可擴(kuò)展
可根據(jù)需要替換某個插件,只有該插件實現(xiàn)了相同的接口,即使內(nèi)部功能不相同,這樣就實現(xiàn)了插件可替換、按需組合。通過在新的插件中支持更多的接口,可擴(kuò)展更多的功能。可以在新插件中局部替換原有插件的某些接口或部分函數(shù),實現(xiàn)重用和擴(kuò)展。
f) 線程安全性
本插件機(jī)制所提供的內(nèi)部實現(xiàn)文件考慮了線程安全性,允許多線程訪問而不沖突,同時采用的是輕量級的鎖定機(jī)制(計數(shù)原子鎖定),運(yùn)行開銷很小。
g) 跨版本
允許不同版本的VC++開發(fā)的插件相互調(diào)用對方的接口,雖然實際中一般不需要這樣做。由于沒有采用VC++特殊的編譯指令,因此容易移植到其他開發(fā)平臺下。
