浅谈基于插件的软件框架(1)

     近段时间,由于项目需求,本人正在设计一个基于插件的软件框架,同时定义了一套插件规范,但是越到后面,越发现很多问题找不到很好的解决方法。这里本人将近段时间的一些心得体会与大家分享,同时将最近设计的一个插件框架进行简单的描述,望大家能多提意见,谢谢。

     什么是插件/strong>

     插件有什么好处呢以概括为以下几点(可能概括的不全):

     1.结构清晰,且容易调整。对一个庞大的软件而言,由于很多功能模块都以插件的形式单独存在,使得系统的复杂度明显减低。

     2.易修改、可维护性强。由于插件与宿主程序之间通过接口联系,就像硬件插卡一样,可以被随时删除,插入和修改,所以结构很灵活,容易修改,方便软件的升级和维护。

     3.模块(插件)间的独立性强,且开发效率高。由于插件与宿主程序、插件与插件之间的通信都由宿主程序来提供支持,所以各个插件可以单独的编译,提高开发效率。

     4.开发灵活度高。可以根据资源的实际情况来调整开发的方式,资源充足可以开发所有的插件,资源不充足可以选择开发部分插件,也可以请第三方的厂商开发,用户也可以根据自己的需要进行开发。

     还有一点需要明白,如上面所说的普通的插件是一种依赖于宿主程序但又可以完全独立于宿主程序的代码(物理上),但其实并不是所有的插件都是这样,很多时候我们也可以将主程序中的某个模块叫做插件。这个将在后面说明。

     C++如何开发插件(windows平台)/strong>

     具本人所知道的在windows平台中用C++开发插件的方法有三种:

     1.基于C++的虚机制

     这种方式是基于纯粹的C++语言,我们知道C++的核心是多态,即在运行期决定应该调用哪中类型对象的函数的行为。在一个稍具规模的软件中,我们会将功能模块进行清晰的划分。于是可以有这样一种想法,我们可以定义一个接口类,该接口类由每个功能模块共用,该类没有任何的数据成员,只有一些抽象接口(纯虚函数),该类也可以称作模块的“界面”。所有的功能模块均由一个入口类对该抽象类进行继承,同时实现接口部分。所有对模块功能的调用均通过该接口类来完成(通过虚机制)。当然,由于模块的功能千变万化,提供的接口也千奇百怪,因此,为所有功能模块设计一个通用的“界面”类很困难也不合理。我们可以针对各个功能模块的特点,对模块进行分类,并设计不同的“界面”类。

     2.基于动态链接库

     动态链接库(Dynamic Link Library )是一种很好的东东,它不是可执行文件,不可单独运行,需要依附于宿主程序(exe),但是它提供了一种方法,使进程可以调用不属于其可执行代码的函数。在windows平台中,我们可以用windows自身提供的API函数(LoadLibrary)进行加载,加载完成后,dll即可以与你的宿主程序实现内存共享。于是,宿主程序就可以通过动态链接库中的导出函数来调用它所提供的功能。

     3.COM组件的方式

     COM组件想必大家用的都比较多,这里就不做说明了。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2010年11月17日
下一篇 2010年11月18日

相关推荐