一种基于插件的综合应用界面集成框架

2019-07-12 08:28刘筱秦永刚陆泽健
电子技术与软件工程 2019年9期
关键词:席位插件框架

文/刘筱 秦永刚 陆泽健

业务应用信息系统前端席位软件是部署在业务应用信息系统操作员席位有用于支持操作员进行操作控制的前台界面软件,用于支持操作员开展地理标绘、信息交互、状态监控等业务活动。当前在前端席位软件开发、集成和维护中暴露出以下问题:

(1)席位软件界面风格不统一问题,由于业务应用信息系统的复杂性,同一系统中需集成不同单位开发的不同应用,各单位开发的前端界面缺乏统一设计和管理,导致席位软件界面风格不统一,增加了使用的复杂度。

(2)席位基础业务功能重复开发的问题,业务应用信息系统前端席位不同席位间有大部分基础业务功能是相同的,但由于不同席位在开发时缺少统一的集成框架,导致相同功能重复开发或模块复用度不高,增加了系统的开发成本,同时降低了系统的可靠性。

(3)席位前端软件升级维护成本较高的问题,由于信息系统较为复杂,各模块耦合度高,导致在系统升级维护过程中,增加或修改部分功能有可能导致需要对整个前端软件的多个模块进行修改,导致升级维护软件成本较高。

针对以上问题,本文提出了一种基于插件的综合应用界面集成框架软件,能够动态集成按照插件开发规范开发的插件,支持以插件为单元动态组装系统。同时综合应用界面集成框架软件集成了界面管理、时间管理、态势标绘、空间位置计算、网络通信等基础服务插件,为开发人员提供相关基础服务应用功能;开发人员可以在框架软件的基础上,调用基础服务插件开放的二次开发接口,按照插件开发标准并结合业务需求开发业务插件,构建业务应用信息系统前端席位软件。

1 系统框架设计

综合应用界面集成框架软件包括:插件集成模块、界面管理模块、时间管理模块、地图标绘模块、空间位置计算模块和网络通信模块。其中,上述六个子模块又可以划分为若干小的功能模块。

图1:插件集成原理图

(1)插件集成模块是综合应用界面集成框架软件的核心模块,主要用于动态集成业务插件对象,并支持业务插件对象与界面窗体之间及业务插件对象与业务插件对象之间的信息交互;

(2)界面管理模块主要提供对话框管理和浮动窗体管理功能;

(3)时间管理模块采用C/S对时机制,主要负责提供各席位与时间同步服务器的天文时间的对时及时间获取、设置与转换功能;

(4)地图标绘模块主要提供二三维地图显示及标绘功能;

(5)空间位置计算模块主要负责提供空间坐标系的转换及运算功能;

(6)网络通信模块采用消息公布与订购机制,主要负责提供插件和插件之间、席位和席位之间的消息通信。

2 实现原理

综合界面集成框架的核心是插件集成,插件集成的原理如图1所示。

(1)插件综合集成框架读取配置文件获取需要加载的插件信息,形成插件信息列表,然后到指定目标下,按照插件信息列表获取所有需要加载的插件动态库文件;

(2)插件综合集成框架通过动态库文件句柄加载插件动态库;

(3)插件综合集成框架通过插件动态库提供的函数动态创建插件对象;

(4)插件综合集成框架通过契约(插件集成标准)获取插件对象,并通过插件对象实现系统功能。

在插件集成过程中主要需解决动态加载、契约订立、菜单调用、接口扩展四个方面的问题。对于这四个部分见关键技术部分内容。

3 关键技术

3.1 契约订立

无论是用COM的方式,还是普通DLL,抑或.NΕT方式来实现插件框架,首先要面临的问题就是如何订立契约。契约是应用程序和插件之间进行交互的依据和凭证。应用程序必须声明我有什么样的功能可被插件使用,并且插件必须符合什么条件才能被我使用。反之,插件必须要知道应用程序提供什么样的功能,我才能将自己的功能融入到应用程序的体系中。

在插件综合集成框架中我们采用虚类的方式来实现契约的建立,即动态库插件创建一个插件类的对象,插件类基于IPlugComUIBase来实现,将插件对象的指针返给插件综合集成框架;因为插件类继承于IPlugComUIBase,因此在插件综合集成框架中他被转换为IPlugComUIBase指针类型,插件综合集成框架通过IPlugComUIBase指针的就可以访问插件的具体实现。

3.2 动态加载

不管你采用什么方式实现插件式的应用程序框架,核心还是动态加载,换句话说,没有动态加载技术也就无所谓插件式的应用程序框架了。使用Com实现的话,你可以利用Com的API通过ProgID来动态创建COM对象,而在插件综合集成框架中我们为降低程序的复杂程度,提高程序的可移植性(COM主要应用Windows平台)我们使用Windows 的API函数(在其他平台我们可以采取相应API函数来代替)来动态加载DLL。

(1)插件综合集成框架调用FindFirstFile和FindNextFile函数在制定目录下循环搜索DLL文件;

(2)插件综合集成框架调用LoadLibrary动态加载DLL

(3)插件综合集成框架使用GetProcAddress函数来获取函数Plug_CreateUIObject的地址;

(4)插件综合集成框架通过地址调用Plug_CreateUIObject函数创建插件对象;

(5)插件综合集成框架通过IPlugUICom访问插件对象,完成插件对象注册。

3.3 菜单调用

插件在加载完成后,通过InitBtnInfo函数向框架注册菜单命令,框架建立菜单事件列表,并在窗口界面上根据列表生成系统菜单,当用户点击框架上的菜单时,框架通过列表确认注册该菜单的插件对象,调用插件对象的ProCommand消息,将菜单消息反馈给插件。

3.4 接口扩展

插件可以通过定义接口类,并将接口类放入公共接口集,将自身的功能提供给其他插件。具体步骤如下:

(1)首先插件定义一个基于插件接口基类的接口声明类,该类为纯虚类,包含该插件对外提供的函数接口声明以及该接口定义的接口标识;

(2)插件在自身内部基于该声明,定义继承于声明类的接口实现类,实现接口定义的功能;

(3)插件创建实现类对象,并在插件的RegisteAllInterface接口注册处理中注册该接口;

(4)其他插件首先通过插件名称获取使用接口所在的插件对象,然后通过该对象的GetInterface函数传入接口标识,获取接口对象。然后在调用接口对象进行相应业务处理。

4 系统应用情况

目前该集成框架已应用于某业务应用信息处理系统前端界面集成,通过采用该集成框架对前端业务进行集成。在集成过程中,集成框架具有以下优点:

(1)解决了席位软件界面风格统一问题,界面布局、显示要素的样式、配色等由框架进行统一管理,可根据需求进行界面快速定制和开发,同时实现了软件界面与应用分离。

(2)解决了基础业务功能重复开发的问题,软件中类似于地理标绘、网络通信、界面管理等通用基础功能,由专门团队构建统一的基础服务插件进行实现,避免了基础业务的重复开发。

(3)降低了系统的运维成本,整个框架基于模块化、组件化的设计理念,通过综合应用界面集成框架集成的席位软件的功能变更,只需增删相应插件,而不影响席位软件体系结构,便于软件功能变更,使系统易于维护。

5 结束语

本文提出了一种基于插件的综合应用界面集成框架,解决了业务应用信息系统在显示前端界面集成中界面风格不统一、升级维护困难、基础服务插件不统一等问题。后续将针对业务应用需求,对基础服务插件进行研究,通过基础服务插件进一步扩展综合应用界面集成框架功能。

猜你喜欢
席位插件框架
广义框架的不相交性
自编插件完善App Inventor与乐高机器人通信
WTO框架下
MapWindowGIS插件机制及应用
一种基于OpenStack的云应用开发框架
基于Revit MEP的插件制作探讨