一種松耦合的分層插件系統的設計和實現
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
C++編寫的桌面軟件中傳統的App+Dll的架構已經顯現出的模塊之間的強耦合、維護性差、升級不方便等諸多弊端,為此我進行了一些思考,有興趣的朋友請看我以前的一個思考片斷:《Windows平臺下C++插件系統實現的幾個關鍵技術問題及其解決思路》,今天則具體介紹的我的一個具體設計和實現。
我的目標是要去除功能模塊的相互依賴,在模塊調用必須采用動態加載的辦法,但同時各個模塊可以進行自由地進行通訊。我的設想大致是這樣的:在動態加載各個模塊后調用統一接口后生成插件對象,在某個插件對象都能通過標識符找到其它的插件對象,通過統一的接口將數據傳給它們。系統架構圖如下:
系統流程圖如下:
大家可以看到,要構建這樣的系統需要解決兩個關鍵問題:
1. 如何動態加載dll創建插件對象以及插件基類對象的接口設計
2. 插件模塊之間的通訊問題
如何解決這兩個問題我已有了基本的思路。為了驗證我的思路是可行的,我用VC2008新建了一個LayeredArchit解決方案,該解決方案實現這樣一個簡單功能:統計指定目錄下的文件數,然后將統計結果保存到一個文本文件。這個解決方案由以下工程組成:
BaseObjLib —— 底層庫,用于定義底層對象和接口
StatFile —— 統計文件插件
OutputFile —— 將統計結果輸出到文本文件的插件
CmdApp —— 一個主調用程序(是一個控制臺程序)。
在每個插件模塊都實現一個插件對象,繼承基類插件對象IPluginObj,里都有這樣一個統一的插件導出接口來生成插件對象:
[cpp] view plaincopy