一种基于工具集的桌面端插件框架及实现方法技术领域
本发明涉及桌面客户端的工具插件的开发方法,特别是涉及一种基于工具集的桌
面端插件框架及实现方法,开发者在该模式下遵循插件开发规范,基于开发环境提供的基
础二次开发库,即可快速扩展所需桌面端工具插件,并发布为通用的云服务。
背景技术
云计算是虚拟化、效用计算、基础设施即服务、平台即服务、软件即服务等概念混
合演进及跃升的结果,云计算时代是必然趋势,“云服务”作为一种新兴的共享基础架构的
方法已经越来越广泛的应用于信息领域。云计算技术将连接到互联网的PC、数据库、服务
器、甚至包括昂贵的科学仪器连接到一起,并将空闲计算能力、存储空间等利用起来。用户
通过互联网访问云计算平台获得需要的信息服务,而不必考虑提供这些信息服务的具体的
硬件设施、操作系统等支持环境,从而实现了广泛的多源异构信息资源的充分共享。随着云
计算理念的提出及深化,软件应用终端向着微型化、移动化方向发展,同时服务器端向着基
于跨平台的、面向服务的产品体系及架构并支持小型机、大型机、集群等应用的巨型化方向
发展。
传统的软件开发模式偏向于定制开发,功能设计与应用对象一一对应。开发的应
用只为满足某一特定对象的使用,不具备通用性,耦合性很强。功能之间并未相互独立,代
码冗余,复用率也不高。对当新应用与旧应用有一定的相似度时,最常采用的方法就是基于
已有应用进行修改,或者直接将代码拷贝、调试、修改,由此带来了应用工程越来越大、Bug
越来越多、软件开发效率极度低下,开发出的软件往往存在很多不可预见的问题。因此,在
传统软件开发应用中,体现了传统开发模式下存在开发复杂、耦合性强、复用性差、成本高、
效率低等问题。
发明内容
为解决上述问题,本发明提供了一种基于工具集的桌面端插件框架及实现方法,
本发明采用的“框架+插件”的开发模式具有开发简易、低耦合、高复用、高效率等特性。
为实现以上发明目的,本发明一种基于工具集的桌面端插件框架,其不同之处在
于:其包括以下模块:
宿主程序模块:宿主程序是整个插件开发框架运行的入口,它通过插件引擎加载插件
对象,并将插件对象以用户界面(UI)的形式来展示,以及负责协调这些插件对象与界面控
件间的交互;
第三方界面库模块(Dxp):第三方界面库提供界面控件对象,被宿主程序调用来实现与
插件对象间的交互;
插件引擎模块:插件引擎负责解析插件程序集,提取插件程序集中的插件类型信息,并
提交给宿主程序生成对应的界面对象;插件引擎提供一种通讯契约,即插件接口;插件程序
集如果实现了上述插件接口,就能被插件引擎认可为合格的插件;插件引擎提供一个插件
容器(PluginContainer),负责管理插件的加载、卸载状态控制;插件引擎提供一个运行框
架(Application),负责管理插件引擎运行状态、与插件程序集间的交互以及与地图数据
(MapDocument)交互。
所述插件容器(PluginContainer)通过从插件程序集(Plugin….dll)中获取插件
对象,分别装入对应的插件容器(PluginContainer)中,实现插件的加载;从插件容器
(PluginContainer)中删除插件对象,实现插件的卸载;
插件程序集模块:实现了插件引擎定义的插件契约的应用程序集,是基于.NET框架的
应用功能的主体实现。
以上方案中,所述宿主程序模块负责了界面的解析、加载、运行、保存过程,其启动
过程必须满足用户的配置性和嵌入性需求,宿主程序的启动、关闭过程大概分为如下几个
步骤:
步骤301:加载内部Application.xml文件,根据XML初始化系统属性,并且加载欢迎屏
(如果存在欢迎屏则加载,否则不加载);
步骤302: 判断是否存在配置文件(exe.config文件),如果不存在,则将
Application.xml的内容赋值给新文档RealDoc,否则将配置文件exe.config的内容赋值给
新文档RealDoc;
步骤303:根据新文档来修订系统属性、创建插件对象、创建界面、发送事件;
步骤304:宿主程序启动完成(如果前面加载了欢迎屏,关闭欢迎屏);
步骤305:宿主程序关闭,宿主程序需要保存用户界面以备下次启动应用程序,它将会
保存用户当前的所有设置,待下次启动时则根据配置文件初始化为上次保存的界面。
上述方案中,插件的加载包括以下步骤:
步骤501:插件容器(PluginContainer)加载插件程序集(Plugin….dll)。若之前未加
载插件,则将插件程序集(Plugin….dll)插入到插件程序集列表末尾;
步骤502:插件容器(PluginContainer)创建所有实现了IPlugin接口的对象,并将每个
对象添加到相应的插件词典中;
步骤503:宿主程序(Apploader.exe)处理PluginAdded事件来创建界面并发送
PluginLoadedEvent事件 。
上述方案中,所述插件的卸载包括以下步骤:
步骤601:插件容器(PluginContainer)卸载插件程序集(Plugin….dll),若插件未卸
载,则将插件程序集(Plugin….dll)从插件程序集列表中移除;
步骤602:删除插件容器(PluginContainer)中所有实现了IPlugin接口的对象,并将每
个对象从相应的插件词典中移除;
步骤603:宿主程序处理PluginRemoved事件来删除界面并发送PluginUnLoadedEvent
事件。
一种基于工具集的桌面端插件框架的实现方法,其包括以下步骤:
步骤1):配置开发环境。将开发所需的集成开发环境、开发者授权许可文件、开发框架
文件等下载到PC端,实现一键部署;
步骤2):开发/调试:在遵循插件契约的前提下,用户按照接口说明在配置好的开发环
境中调用已有的插件,实现插件接口,并按照用户的个性需求编写相应的代码完成整个插
件的开发,生成一个合格的插件;
步骤3):测试:开发者进行插件测试并按照进行测试结果的填写,插件测试通过后进入
下一步骤;
步骤4):发布:测试通过的插件,发布在插件程序集中,供插件容器加载、运行;
步骤5):提交:插件引擎提取插件程序集中的插件类型信息,并提交给宿主程序生成对
应的界面对象。
对比现有技术,本发明的有益特点如下:
本发明采用的“框架+插件”的开发模式具有开发简易、低耦合、高复用、高效率、通用性
高、易迁移、易聚合等特性。
本发明开发出来的工具插件具有任意纵生、自由聚合、迁移方便、易于重构等特
点,全面满足软件开发者对云环境下软件开发的新需求。
附图说明
图1为基于工具集的桌面端插件开发模式;
图2为桌面端插件的开发中间件示意图;
图3为桌面端插件的开发步骤图
图4为宿主程序启动、关闭的流程图;
图5为插件的动态加载实现原理;
图6为插件的加载步骤;
图7为插件的卸载步骤,插件的卸载与加载相反;
图8为插件运行框架。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
工具框架又称插件框架等,读者可以简单理解为在开发GIS桌面应用时,MapGIS已
从一开始就为开发者准备好了这一框架,剩下的工作即是基于预置的工具插件往该框架里
添加插件即可,即“框架+插件”开发模式。
工具插件,是一种基于.NET Framework框架,并遵循目标框架通讯契约(纯接口定
义)的应用程序集,其在操作系统里表现为“.dll文件”。
工具集是一组工具软件的集合,包含应用工具、插件工具等,即包含.exe文件,也
包含.dll文件,每一个都是绿色小软件,开发者可以重新提取并通过聚合等方式制作自己
的工具插件。
本发明一种基于工具集的桌面端插件开发方法,该开发模式提供插件扩展框架,
开发者在该环境中遵循插件开发规范,基于开发环境提供的基础二次开发库,即可快速扩
展所需桌面端插件,并可以发布为云服务。
该种开发模式完全按照云的思想构建,针对.NET平台版本的桌面端,提出了一套
通用的桌面端开发标准与规范,遵循此标准规范开发桌面工具与工具插件,开发出来的工
具插件可以自由组合、重构、聚合等,保证了所开发的平台软件的重构、聚合、迁移、纵生的
特性。
本发明的技术方案包括第三方界面库、宿主程序、插件引擎、插件程序集四大模
块。
上述第三方界面库提供界面控件对象,被宿主程序调用来实现与插件对象间的交
互;
上述宿主程序是整个插件开发框架运行的入口,它通过插件引擎加载插件对象,并将
插件对象以用户界面(UI)的形式来展示,以及负责协调这些插件对象与界面控件间的交
互;
上述插件引擎负责解析插件程序集,提取插件程序集中的插件类型信息,并提交给宿
主程序生成对应的界面对象;
进一步地,插件引擎提供一种通讯契约,即插件接口,插件程序集只要实现了这些接
口,就能被插件引擎认可为合格的插件;
进一步地,插件引擎提供一个插件容器(PluginContainer),负责管理插件的加载、卸
载等状态控制;
进一步地,插件引擎提供一个运行框架(Application),负责管理插件引擎运行状态、
与插件程序集间的交互以及与地图数据(MapDocument)交互。
上述插件程序集是实现了插件引擎定义的插件契约的应用程序集,是基于.NET框
架的应用功能的主体实现。
图1为基于云计算的桌面端插件开发模式。
基于云计算的桌面端插件开发模式,实质是“框架+插件”的开发模式,首先提供功
能完备的插件框架(开发环境),以及预置一些基础和专业领域常用的工具插件,以供开发
者灵活调用、配置。从宏观上看,桌面端插件开发模式如图1所示。
图2为桌面端插件开发中间件示意图,该中间件提供插件扩展框架,开发者在该环
境中遵循插件开发规范,基于开发环境提供的基础二次开发库,即可快速扩展所需桌面端
插件,并可以发布为云服务。开发中间件包括以下模块:
宿主程序模块:宿主程序是整个插件开发框架运行的入口,它通过插件引擎加载插件
对象,并将插件对象以用户界面(UI)的形式来展示,以及负责协调这些插件对象与界面控
件间的交互;
第三方界面库模块(Dxp):第三方界面库提供界面控件对象,被宿主程序调用来实现与
插件对象间的交互;
插件引擎模块:插件引擎负责解析插件程序集,提取插件程序集中的插件类型信息,并
提交给宿主程序生成对应的界面对象;插件引擎提供一种通讯契约,即插件接口,插件程序
集只要实现了这些接口,就能被插件引擎认可为合格的插件;插件引擎提供一个插件容器
(PluginContainer),负责管理插件的加载、卸载等状态控制;插件引擎提供一个运行框架
(Application),负责管理插件引擎运行状态、与插件程序集间的交互以及与地图数据
(MapDocument)交互。
所述插件容器(PluginContainer)通过从插件程序集(Plugin….dll)中获取插件
对象,分别装入对应的插件容器(PluginContainer)中,实现插件的加载;从插件容器
(PluginContainer)中删除插件对象,实现插件的卸载。
插件程序集模块:插件程序集是实现了插件引擎定义的插件契约的应用程序集,
是基于.NET框架的应用功能的主体实现。
图3为桌面端插件的开发步骤图,即图2插件程序集模块中的插件的开发步骤。
本技术方案提供给用户的开发工具基本是由可定制框架和若干插件组成,同一框
架下的插件可以是由不同的开发者提供,因此本开发模式可以基于已有的框架开发各类业
务插件。
一种基于工具集的桌面端插件框架的实现或开发方法,其包括以下步骤:
步骤1):配置开发环境。将开发所需的集成开发环境、开发者授权许可文件、开发框架
文件等下载到PC端,实现一键部署;
步骤2):开发/调试:在遵循插件契约的前提下,用户按照接口说明在配置好的开发环
境中调用已有的插件,实现插件接口,并按照用户的个性需求编写相应的代码完成整个插
件的开发,生成一个合格的插件;
步骤3):测试:开发者进行插件测试并按照进行测试结果的填写,插件测试通过后进入
下一步骤;
步骤4):发布:测试通过的插件,发布在插件程序集中,供插件容器加载、运行;
步骤5):提交:插件引擎提取插件程序集中的插件类型信息,并提交给宿主程序生成对
应的界面对象。
图4为宿主程序启动、关闭的流程图。
宿主程序负责了界面的解析、加载、运行、保存过程,其启动过程必须满足用户的
配置性和嵌入性需求,宿主程序的启动、关闭过程大概分为如下几个步骤:
步骤301:加载内部Application.xml文件,根据XML初始化系统属性,并且加载欢迎屏
(如果存在欢迎屏则加载,否则不加载);
步骤302: 判断是否存在配置文件(exe.config文件),如果不存在,则将
Application.xml的内容赋值给新文档RealDoc,否则将配置文件exe.config的内容赋值给
新文档RealDoc;
步骤303:根据新文档来修订系统属性、创建插件对象、创建界面、发送事件;
步骤304:宿主程序启动完成(如果前面加载了欢迎屏,关闭欢迎屏);
步骤305:宿主程序关闭,宿主程序需要保存用户界面以备下次启动应用程序,它将会
保存用户当前的所有设置,待下次启动时则根据配置文件初始化为上次保存的界面。
图5是插件的动态加载实现原理。
插件的动态加载可以通过.NET Framework的反射机制来实现。反射是动态发现类
型信息的一种能力,它类似后期绑定,帮助开发人员在程序运行时利用一些信息动态地使
用类型。在.NET Framework中,为了实现动态加载,提供了Assembly,Type和Activator等类
和相关方法。
图6是插件的加载步骤。
步骤501:插件容器(PluginContainer)加载插件程序集(Plugin….dll)。若之前
未加载插件,则将插件程序集(Plugin….dll)插入到插件程序集列表末尾;
步骤502:插件容器(PluginContainer)创建所有实现了IPlugin接口的对象,并将每个
对象添加到相应的插件词典中;
步骤503:宿主程序(Apploader.exe)处理PluginAdded事件来创建界面并发送
PluginLoadedEvent事件 。
图7是插件的卸载步骤,插件的卸载与加载相反。
步骤601:插件容器(PluginContainer)卸载插件程序集(Plugin….dll),若插件
未卸载,则将插件程序集(Plugin….dll)从插件程序集列表中移除;
步骤602:删除插件容器(PluginContainer)中所有实现了IPlugin接口的对象,并将每
个对象从相应的插件词典中移除;
步骤603:宿主程序处理PluginRemoved事件来删除界面并发送PluginUnLoadedEvent
事件。
图8是插件运行框架(Application),负责管理插件引擎运行状态和与插件程序集
(Plugin….dll)间的交互。