C++插件平台


第1章 设计原理

1.1.   热插拔,自动升级

插件式开发,支持插件的动态加载卸载。 C/C++ 可以单独部署的最小单元是动态库,所以插件是动态库的形式存在。

系统可以自动检测动态库的变化,在不停止服务的情况下实现功能的扩展和系统的升级。

1.2.   微内核,稳定可靠

插件运行环境采用微内核的开发思想,确保系统的稳定。插件运行环境采用进程池机制,同时还支持主动模式(无监听端口)和被动模式(监听端口)。

1.3.   强化技术,简化业务

分离技术平台和业务平台,技术平台封装基础类库和运行框架,简化业务开发的难度,最大化复用基础组件。

1.4.   接口编程,统一规范

业务模块的开发,统一编程接口,真正做到面向接口编程、施行面向对象开发思想。

1.5.   性能优先,扩展次之

插件之间数据通讯,优先考虑性能,所以 XML 数据总线的方式不可取,性能最高的莫过于数据指针的传输。

第2章 功能架构

架构层次图

2.1.   基础组件

²        屏蔽线程和进程的管理

基于基础组件开发看不到线程和进程,只需要开发功能组件和业务组件,并且两种组件都是动态库的形式存在。

²        实现功能的热部署

当动态库或框架配置文件有变化时,基础框架可以自动加载组件,实现功能扩展和系统的升级。

²        实现功能扩展框架

支持功能的扩展,不用修改现有的组件,只需增加相应的业务组件即可实现功能的增加,在架构层次上就实现了对开闭原则的支持。

²        支持主动被动模式

支持主动模式,同时也支持主动模式;基于基础组件可以开发服务器端系统,也可以开发客户端系统。

²        提供资源池的封装

对以一些常用的调用提供统一的接口。

²        提供简单易用的开发接口

以类的方式提供开发接口,同时提供开发实例,降低开发的难度。

2.2.   功能组件

²        数据库读写类

操作数据库,读写数据中的内容,保证数据库操作的完整性、一致性。

²        数据生成类

组装数据,方便组件之间的数据交换。

²        业务计算类

计费结算系统会有大量的计算公式、优惠策略,所以本类组件即为业务优惠计算的封装等等。

2.3.   业务组件

²        流程控制类

调用功能模块,组装成业务功能。

²        事务控制类

确保业务功能的原子操作性。

²        接口实现类

实现组件的接口,以至于可注册到组件运行框架上,并正常运行。

第3章 使用流程

使用流程图

 

代号为X3的C++轻量级通用插件框架平台是一套通用的C++轻量级插件体系,由多个独立插件模块组成。应用程序可以基于X3插件框架进行快速开发,X3插件框架中的插件既可以单独使用,又可以灵活组合使用。X3插件框架采用VC++开发,没有使用MFC、ATL、COM,已经过3年十几个系统的实际使用验证。 目前X3插件框架包括插件内核部分(插件基础、插件管理器、Observer管理器插件、日志管理器插件)和实用技术插件(XML读写封装插件数据库操作封装插件、文件操作实用插件、文本操作实用插件、本地化字符串表插件等)。 X3插件框架的特点有: a) 接口定义简单灵活 采用普通的C++接口,即由纯虚函数组成的结构体,不需要特殊的基类,不需要宏和UUID申明;同时可以使用C++的各种变量类型,不受COM接口那样的约束。例如下面的接口Ix_定义: interface Ix_Example { virtual void Foo() = 0; virtual void* GetData(std::vector& items) = 0; }; b) 接口与实现分离 对外提供接口文件,在插件内部用类来实现一个或多个接口,不需要对外导出该类或暴露实现细节。这样还有一个好处是只有约定了接口就可以让多个模块并行开发,模块相互之间不存在编译依赖(不需要其他插件的LIB等文件),这可用于测试驱动开发模。 c) 多接口转换、引用计数管理 采用智能指针类来管理接口的引用计数及生命期,可从一个接口动态转换为另一个接口(内部采用C++的RTTI机制动态转换),可以区分插件内部的接口引用和插件外部的接口引用。 d) 模块透明部署 一个模块只需要使用其他模块的接口,不需要关心该接口是在哪个插件中实现的。可以根据需要将各个实现类进行合并或拆分,使其分布到不同插件中,而接口使用者不受影响。另外,插件部署于哪个目录也不影响插件接口的使用。 e) 模块可替换、可扩展 可根据需要替换某个插件,只有该插件实现了相同的接口,即使内部功能不相同,这样就实现了插件可替换、按需组合。通过在新的插件中支持更多的接口,可扩展更多的功能。可以在新插件中局部替换原有插件的某些接口或部分函数,实现重用和扩展。 f) 线程安全性 本插件机制所提供的内部实现文件考虑了线程安全性,允许多线程访问而不冲突,同时采用的是轻量级的锁定机制(计数原子锁定),运行开销很小。 g) 跨版本 允许不同版本的VC++开发的插件相互调用对方的接口,虽然实际中一般不需要这样做。由于没有采用VC++特殊的编译指令,因此容易移植到其他开发平台下。 编译运行环境 本插件机制采用C++实现,用到了C++的RTTI机制和少量Windows API函数,没有使用MFC、ATL、STL,没有使用LIB文件,外部依赖文件少,没有使用VC++特殊编译指令。 编译环境为Visual C++ 6.0/2003/2005/2008/2010,其他C++开发平台下待测试(从实现原理上看应该没问题)。 运行环境为Windows 2000及以后的操作系统,Windows 98需要安装UNICODE支持包。 X3插件框架目前在局部范围内开放源码,还未在公共开源网站范围正开放。可以学习研究、任意修改改进,但不可以换成其他作者另外发布,转载时请列出来源。 有改进意见可在博客地址或者邮件中提出。 博客:http://www.cnblogs.com/rhcad 邮件:rhcad@hotmail.com 详细描述见 http://www.cnblogs.com/rhcad/archive/2010/09/27/1836943.html 附件内容: .\Product_vc100.sln .\Product_vc60.dsw .\Product_vc80.sln .\Product_vc90.sln .\Code ------\pkg_Core ------\pkg_Example ------\pkg_UnitTest ------\pkg_Core\Interface ------\pkg_Core\Modules ------\pkg_Core\Interface\AppUI ------\pkg_Core\Interface\ChangeObserver ------\pkg_Core\Interface\Ix_Object.h ------\pkg_Core\Interface\Ix_ObjectFactory.h ------\pkg_Core\Interface\Log ------\pkg_Core\Interface\Module ------\pkg_Core\Interface\PluginManager ------\pkg_Core\Interface\UtilFunc ------\pkg_Core\Interface\Utility ------\pkg_Core\Interface\XComPtr.h ------\pkg_Core\Interface\Xml ------\pkg_Core\Interface\AppUI\CmdMsgObserverSimple.h ------\pkg_Core\Interface\AppUI\Cx_CreateWnd.h ------\pkg_Core\Interface\AppUI\Ix_CreateWnd.h ------\pkg_Core\Interface\AppUI\RawCmdMsgObserver.h ------\pkg_Core\Interface\ChangeObserver\ChangeNotifyData.h ------\pkg_Core\Interface\ChangeObserver\Ix_ChangeManager.h ------\pkg_Core\Interface\ChangeObserver\Ix_ChangeObserver.h ------\pkg_Core\Interface\Log\DebugR.cpp ------\pkg_Core\Interface\Log\DebugR.h ------\pkg_Core\Interface\Log\ILogObserver.h ------\pkg_Core\Interface\Log\Ix_LogManager.h ------\pkg_Core\Interface\Log\LogHelper.h ------\pkg_Core\Interface\Module\Cx_Module.h ------\pkg_Core\Interface\Module\Cx_Object.h ------\pkg_Core\Interface\Module\Cx_SimpleObject.h ------\pkg_Core\Interface\Module\Cx_SingletonObject.h ------\pkg_Core\Interface\Module\Ix_Module.h ------\pkg_Core\Interface\Module\XClassItem.h ------\pkg_Core\Interface\Module\XModuleImpl.h ------\pkg_Core\Interface\Module\XModuleItem.h ------\pkg_Core\Interface\Module\XModuleMacro.h ------\pkg_Core\Interface\PluginManager\Ix_PluginLoader.h ------\pkg_Core\Interface\PluginManager\PluginManager.h ------\pkg_Core\Interface\PluginManager\XComCreator.h ------\pkg_Core\Interface\UtilFunc\AutoNew.h ------\pkg_Core\Interface\UtilFunc\ConvStr.h ------\pkg_Core\Interface\UtilFunc\ctrim.h ------\pkg_Core\Interface\UtilFunc\func_s.h ------\pkg_Core\Interface\UtilFunc\LockCount.h ------\pkg_Core\Interface\UtilFunc\LockSyn.h ------\pkg_Core\Interface\UtilFunc\ReadInts.h ------\pkg_Core\Interface\UtilFunc\RelToAbs.h ------\pkg_Core\Interface\UtilFunc\RoundStr.h ------\pkg_Core\Interface\UtilFunc\SafeCall.h ------\pkg_Core\Interface\UtilFunc\ScanFiles.h ------\pkg_Core\Interface\UtilFunc\SysErrStr.h ------\pkg_Core\Interface\UtilFunc\vecfunc.h ------\pkg_Core\Interface\UtilFunc\vecptr.h ------\pkg_Core\Interface\Utility\ClsID_TextUtil.h ------\pkg_Core\Interface\Utility\Ix_ClipboardUtil.h ------\pkg_Core\Interface\Utility\Ix_ConfigDBFactory.h ------\pkg_Core\Interface\Utility\Ix_FileTransaction.h ------\pkg_Core\Interface\Utility\Ix_FileUtility.h ------\pkg_Core\Interface\Utility\Ix_FileVersion.h ------\pkg_Core\Interface\Utility\Ix_GuidGenerator.h ------\pkg_Core\Interface\Utility\Ix_StringConvert.h ------\pkg_Core\Interface\Utility\Ix_TempFolder.h ------\pkg_Core\Interface\Utility\Ix_TextFileUtil.h ------\pkg_Core\Interface\Xml\ConfigIOSection.h ------\pkg_Core\Interface\Xml\IFileCryptHandler.h ------\pkg_Core\Interface\Xml\Ix_ConfigData.h ------\pkg_Core\Interface\Xml\Ix_ConfigSection.h ------\pkg_Core\Interface\Xml\Ix_ConfigSectionXml.h ------\pkg_Core\Interface\Xml\Ix_ConfigTransaction.h ------\pkg_Core\Interface\Xml\Ix_ConfigXml.h ------\pkg_Core\Interface\Xml\Ix_StringTable.h ------\pkg_Core\Interface\Xml\Ix_UIConfig.h ------\pkg_Core\Modules\ChangeManager\... ------\pkg_Core\Modules\LogManager\... ------\pkg_Core\Modules\PluginManager\... ------\pkg_Core\Modules\StringTable\... ------\pkg_Example\... ------\pkg_UnitTest\Interface\cppunit ------\pkg_UnitTest\Modules\TestCore ... .\Doc .\Doc\插件开发帮助.chm .\Doc\插件基础使用说明书.pdf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值