区县级国土资源数据监管系统应用框架设计

2015-02-19 03:48彭海涛李爱迪李爱美
地理空间信息 2015年6期
关键词:主程序控件插件

彭海涛,李爱迪,吕 煊,李爱美

(1.重庆市国土资源和房屋勘测规划院,重庆 400020;2.重庆市土地利用与遥感监测工程技术研究中心,重庆 400020;3.国家遥感应用工程技术研究中心 重庆研究中心,重庆 400020)

区县级的国土资源管理部门是我国现行土地管理制度的最终执行者[1],承担了全区国土资源行政审批和业务办理工作。区县级的国土资源综合数据监管系统数据库包括了全区的影像图、土地利用现状图、土地利用总体规划图、基本农田、城市规划图、征供地数据、储备数据、城镇土地级别和基准地价数据、执法监察等各种数据。在这些数据的基础上,区县级的国土资源综合数据监管系统为区县国土管理部门全面、快速、准确掌握全区国土资源数量、质量、结构和空间布局,实现“批、供、用、补、查”的土地资源信息化管理提供了有力武器。

我国县级行政区划数量庞大,各区县国土管理部门工作职责和内容各有特点,不同时段有不同需求。如果按照传统的软件开发方法,每个项目都从头做起,不同项目的复用部分也只是停留在代码的复制或者类库的重用上面,不仅开发效率低,不能满足项目团队开发合作的需要,而且开发出来的软件可伸缩性差,后续的软件维护需要开发人员对整个系统架构十分熟悉,加大了软件的维护成本[2]。目前软件复用已经从通用类的复用发展到面向领域的应用框架。应用框架是同时具备一致性、可重用性、可扩展性3种特性的一组类库,它提供了构建一个系统所需要的基本架构及功能,协助程序员在快速、不易出错的情况下研发应用程序[3]。因此开发一套能在各区县快速部署又能适应不同区县的具体需求的国土资源综合数据监管系统应用框架非常有意义。本文在对重庆市区县级国土资源综合数据监管系统开发与实践进行总结的基础上,提出了基于插件式GIS技术的区县级国土资源综合数据监管系统应用框架的开发策略。

1 关键技术

1.1 框架插件开发方式

一个插件框架由主程序和插件构成,主程序是插件的载体。插件不同于组件和构建[4],是一种遵循一定规范,通过应用程序接口编写出来的程序模块,其本质是在不修改程序主体的情况下对软件的功能进行加强,当插件的接口被公开时,任何人都可以编写插件程序来解决特定的问题[5]。当应用程序已经部署,业务却发生变化时,就可以通过读取插件配置信息,载入新的应用构件实现变化的业务[6]。在插件式框架中,主程序与插件之间信息交流的桥梁就是接口,这种基于接口的设计模式称为桥接模式[7]。在插件式框架中接口分为主程序接口和插件接口2个部分。主程序接口完全由主程序实现,将主程序接口暴露给插件,插件可以获取主程序的资源和数据;插件接口由插件实现,主程序通过插件接口可以展示插件处理后的数据[8]。

1.2 开发平台

插件技术的实现方式有脚本方式、COM方式和.NET平台的反射方式[9]。系统开发中使用.NET平台中的反射技术来实现插件的动态加载。GIS功能使用美国ESRI公司的ArcEngine开发包提供的.NET编程接口。通过运行时授权,基于ArcEngine开发包二次开发的GIS程序可以脱离ArcGIS桌面程序而独立部署。系统界面使用了基于.NET Framework第三方的控件DotNetBar。

2 系统框架

区县级国土资源综合数据监管系统应用框架如图1所示,框架由主程序框架和插件库组成。通过主程序框架的主程序接口和插件接口,实现了主程序和插件之间的通信。主程序框架通过加载插件来扩展系统的功能。一个插件对应一个程序集,一个插件可以实现一个或多个功能,各功能必须分别实现规定的插件接口。

图1 国土资源综合数据监管系统应用框架图

3 框架接口设计

3.1 主程序接口设计

IMainApp是代表插件式应用框架主程序的接口,该接口主要封装了主程序窗体类AppMainForm、插件在内存中的容器对象AppAllComObjectMemory、ESRI的AxMapControl地图控件对象MainDataMapView、LayOut控件对象AxPageLayoutView、Toc控件对象CurrentTOCControlView以及其他反映当前主程序状态的对象属性,并提供了对这些对象属性操作的方法。主程序窗体类实现了IMainApp接口。通过主程序公开的接口和属性,插件可以获取主程序的数据进行处理分析,插件也可以将处理分析后的结果数据传回给主程序,改变主程序的状态。因此系统中必须有一个静态全局的主程序对象,保存了主程序的状态,而调用者不需要创建该对象。

3.2 插件接口设计

插件接口规定了扩展软件功能的插件必须实现的接口,插件只有实现了规定接口中的方法和属性才能被主程序加载识别。为了满足系统功能的需求,本系统设计了以下2种继承自插件接口的基类:BaseCommandEx和BaseToolEx,这2个类实现的方法和属性如图2所示。①BaseCommandEx类继承自ArcEngine开发包下的ESRI.ArcGIS.SystemUI命名空间的ICommand接口,在主程序界面表现为一个命令按钮。在该接口的OnClick方法中可以实现该插件对应的按钮被触发时进行的操作。OnCreate方法必须在插件生成时调用,将主程序中的地图控件AxMapControl或制图控件PageLayoutControl传进来,以便设置该命令默认的交互对象。②BaseToolEx类继承自ArEngine开发包下的ESRI.ArcGIS.SystemUI命名空间的ITool接口,在主程序界面表现为一个工具按钮。命令按钮直接点击就可以,工具按钮需要额外与界面进行交互,因此需要实现额外的交互事件。

图2 插件接口基类设计图

4 框架主程序设计

4.1 主程序界面设计

主程序是一个用第三方的DotNetBar控件和ArcEngine的控件设计而成的可执行程序(如图3所示)。使用DotNetBar控件可以将主程序界面设计成类似Office风格的界面,此外使用DotNetBar控件也易于用代码控制界面的动态生成。主程序主要负责插件相关的界面生成和主程序中GIS控件、界面控件和插件对象的交互工作。主程序界面的设计中主要考虑到静态和动态界面的设计。对于一些所有用户都用到的软件基础功能对应的静态界面,只需要在软件编译前在主程序框架界面预先把这些插件对应的按钮(ButtonItem)添加,并将插件功能和对应的按钮关联起来,如主程序界面中的“系统设置”、“视图”、“制图”、“工具”、“帮助”都属于静态界面,“地政地籍等专题”则属于动态加载界面。对于动态加载的专业功能插件对应的ButtonItem,则通过代码设置其Command属性,在Command控件的Executed事件中执行这些ButtonItem对应的触发事件。Command是一个DotNetBar控件,Command实现了将界面设计与相应函数的分离,降低系统内部的耦合性,同时可以提高相应函数的复用性。这种动态界面设计方式是为了实现一种软件的动态配置技术,在系统运行时的某个未知时刻由用户来动态配置,使得主程序界面在不同权限的用户面前呈现不同的功能。

图3 主程序界面设计

4.2 插件管理设计

随着系统的不断扩展,开发的插件越来越多,如果系统启动后将所有插件都装载入程序,会消耗计算机不必要的内存。因此框架程序必须有一套管理插件的机制,确定哪些插件是必须加载的,哪些是不需要加载的。插件管理分为插件注册管理和插件菜单管理。插件注册管理界面如图4所示,可以对实现规定接口的程序集进行加载或卸载,插件菜单管理可以在程序运行时动态添加各种菜单面板,在菜单面板上增加按钮,将按钮与已经注册的插件功能进行关联,并将修改的结果以xml文件保存。

图4 系统插件管理界面

5 结 语

设计插件式应用框架的关键在于确定系统的基础功能和扩展功能,即找出变化点和通用点[10]。区县级国土资源综合数据监管系统是一个以地理空间数据为基础的GIS系统,系统以空间数据的管理、分析和展示为核心。GIS系统大部分操作都与地图交互有关,因此插件式GIS系统中的主程序接口的设计和扩展点插件接口的设计必须考虑主程序GIS地图控件和插件的交互,这是GIS插件系统设计中必须考虑的核心问题。基于插件式GIS技术的区县级国土资源综合数据监管系统应用框架可扩展性强,通过该应用框架开发的系统已在重庆市多个区县安装使用,得到了实际的检验。

[1]郭强.国家级新区“一张图”管地信息系统的设计与实现研究——以重庆市两江新区为例[D].重庆:西南大学,2013

[2]闻平,王冲,杨林波,等.基于插件技术的GIS应用框架的研究与实现[J].测绘通报,2012(增刊):608-609

[3]黄忠成.Framework的设计与应用——基于Windows Forms的应用开发实践[M].北京:电子工业出版社,2006

[4]李勇,岳建伟.基于.NET的插件式GIS应用框架设计与实现[J].地理信息世界, 2010(4):82-86

[5]吴亮,杨凌云,尹艳斌.基于插件技术的GIS应用框架的研究与实现[J].地球科学,2006,31(5):609-614

[6]任钢.C#创建插件业务平台[J].电脑编程技巧与维护,2009(9):19-23

[7]刘曦.插件式的海岸侵蚀灾害分析与评价GIS应用框架研究[D].上海:华东师范大学,2009

[8]李何,刘杰..NET平台下基于反射技术的插件式框架的研究[J].软件导刊,2009,8(11):25-26

[9]章志,都金康,卓凤军.基于.NET反射机制的GIS插件技术研究[J].测绘科学,2011,36(4):151-155

[10]何文海,谢建刚.基于.NET平台的插件式应用框架开发[J].电脑知识与技术,2007(15):755-756

猜你喜欢
主程序控件插件
自动升级程序在船舶监测系统中的应用
基于.net的用户定义验证控件的应用分析
自编插件完善App Inventor与乐高机器人通信
浅谈数控铣削技术代码程序的嵌套方式研究
电控冰箱软件模块化设计
关于.net控件数组的探讨
时光倒流 换回PotPlayer老图标
基于jQUerY的自定义插件开发
基于Revit MEP的插件制作探讨
基于嵌入式MINIGUI控件子类化技术的深入研究与应用