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

    上文中简单的介绍了本人设计的基于windows平台的插件框架的插件管理层,该文章里主要描述一下基于该插件框架的插件,本文将详细介绍插件的接口设计及插件间的相互调用问题。

     1.插件的设计

     前面说过,插件本质上讲其实就是一些功能模块,只是在该框架中,他们均已独立的dll形式存在。每个插件对应的功能可能完全不一样,提供的接口也可能完全不一样,插件管理器如何实现对所有插件的统一管理呢了解决这个问题,我们定义了一个基类,该基类是一个抽象类,所有的插件都必须继承与一个公共的插件基类。插件基类作为所有插件的公共基类,必须定义一些通用的接口。这里主要介绍4个通用的接口:

    (1)插件的初始化接口:该接口为每个插件提供的插件管理器的接口指针,插件的初始化接口由插件自己根据实际情况做一些初始化的工作。该接口由插件管理器在所有插件都加载完后统一调用。

    (2)插件功能调用接口:该接口为插件的功能调用的入口,该接口接受一个功能ID(每个插件必须为其提供给外部的所有功能定义唯一的ID)及可变长参数,所有输出参数都需以指针的方式传递。

    (3)插件停止工作接口:该接口需停止插件的所有正在运行的工作(主要针对多线程)。

    (4)插件的释放接口:插件在卸载时调用,主要用于释放插件自己的内存。该接口也有插件管理器统一调用。

     所有的插件都必须继承插件基类,并且根据实际情况实现以上的4个接口。

     2.插件间的数据交互

     插件和插件不可能是完全独立的,很多时候插件间会存在一些数据交互,如何实现这些交互呢/p>

     数据交互方式有两种:通过接口(功能调用接口)交互和服务的方式。

    (1)通过接口(功能调用接口)交互

     从插件基类的设计我们可以看到,初始化接口中插件管理器将自己传给了每个插件(当然插件管理器不可能将其所有的功能都暴露给插件,那样插件的权限太大了,没必要,而且很不安全),传递过来的插件管理器指针并不是真正的插件管理器,而是插件管理器的基类,这个基类提供了插件间的通信所必须的所有接口。简要介绍下几个重要的接口:

     a.插件的查询接口:该接口根据插件的ID和flag返回一个插件基类的指针。

     b.服务的插件接口:该接口在后面讲。

     假如某个插件要访问其他插件的功能,那么首先通过插件的查询接口获取插件指针,然后通过插件的功能调用接口完成功能的调用。

    (2)服务的方式

    在有些情况下,某个插件提供的数据可能需要被其他多个插件进行访问,如果通过功能调用接口进行访问,显然比较麻烦,如何解决该问题务管理器可以,插件可以将一些数据作为服务放入服务管理器的服务中(每个服务必须有一个全局唯一的服务ID,这些服务数据的安全性这里暂不描述),其他插件则根据服务ID查询相关的数据。

     以上的描述都是以最简洁的方式阐述,下文中将描述继承框架做的事。

来源:xumingzheng

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2011年3月8日
下一篇 2011年3月9日

相关推荐