构建自己的插件式GIS平台[1]

Posted by 蒋波涛 7 April,2007 Views (15)Comment

插件式框架其实一点都不神秘,相反,凡是大点的程序都有可能是基于插件架构,或部分基于插件技术的。如AutoCAD、Office、Photoshop和ArcGIS等,当然,很多程序我们感觉不出来它是插件式的,这是因为我们平常很少写关于这些程序的插件。比如office,有几个人用COM的方法扩展下自己需要的功能呢。但在另外一些行业软件领域,如CAD、GIS等,使用二次开发是如此的频繁,这必然要求程序是基于插件式机制。

当然,能够进行二次开发或扩展并非一定基于插件式架构,例如使用VBA开发office或CAD、GSI等,VBA是一个嵌入式的内置环境,它提供了另一种插件环境;但如果写基于COM或.NET的独立DLL来扩展功能,就必须、一定要实现这篇blog关注的插件式框架。

插件式框架是什么?我个人认为,它包括四个部分:UI界面程序,这个文件以exe形式存在,它负责解析插件的内容和类型,以生成各种按钮、工具条和菜单等工具;插件引擎PluginEngine,它以DLL形式存在,负责解析插件的DLL文件,提取出DLL中包含的对象;通讯契约,即平台与插件互相认可的一种标准,一般以Interface的形式存在;附加的组件集,这并不是必要的一部分,它是为了辅助平台而开发的各种工具,如粗粒度的组件集。

插件式框架的机制并不复杂,以.NET开发的平台为例:当我们启动平台窗体的时候,插件引擎会遍历每一个处于插件文件夹中的DLL文件,通过反射机制获得它们的类型,分别生成对象放入一个插件对象集合中,这些插件集合中的对象,会被UI界面程序解析,如果是ICommand对象的,生成一个命令,如果是工具条的,生成一个工具条等等,如此类推。当我们按下一个按钮的时候,我们使用一种称为委托的机制来辨别到底是哪个按钮被按下,同时出发插件对象中的相应事件,这样一个事件就被传给插件对象执行了。

由于插件式框架是一次载入所有的插件DLL,因此,它除了可扩展性这个最大的优点外,还具有非常耗内存的缺点。如ArcMap才1.36M,但它一旦启动,耗费的内存资源就远远大于这个数值。

虽然插件机制并不复杂,但设计一个精巧,优雅且鲁棒性强的框架,却不是一件简单的事情,实现一个插件式平台并不厉害,但做到框架稳定,的确需要下功夫。它的储备知识包括:对OOP的深度理解,尤其是向上转型和向下转型;容器Collection;反射机制;IO库的熟练操作;事件与委托机制;异常处理机制,最后,还包括对一门语言的了解。我选择的是C#,这门语言实在是太优雅了。以致我现在都避免使用VB.NET进行编程。

从下一篇blog开始,我们将讲述插件式框架的架构设计和粗略实现过程。这个框架的代码不会释出,因为它不是一个练笔的作品,而将是一个实际投入使用的产品。

Related Items

Categories : .NET开发 Tags : NET  
Comments
2007-4-7 22:01:08

这篇日志有何意义?值得你放在这么一个地方?

Posted by lee Gravatar Icon

2007-4-7 23:37:21

最近用四天时间开发了一个插件式GIS框架平台,这篇blog是为了记录开发该框架使用的.NET技术,包括转型、委托、配置节、反射等。blog还没有完成。请关注。

Posted by 蒋波涛 Gravatar Icon

2007-4-12 22:02:17

插件式GIS框架的稳定性和性能经过了调整,目前整个框架已经设计完成,投入测试使用。blog即将写出。

Posted by 蒋波涛 Gravatar Icon

2007-4-13 13:06:00

一直在关注之中

Posted by lee Gravatar Icon

2007-4-14 16:31:51

刚开始用AE开发,不知道如何将已有经纬度的一些数据加载到已打开地图数据的Mapcontrol中,也就是说如果有一文本文件记载了多条经纬度和一些相关数据,要将这些数据显示在Mapcontrolkh 已知经纬度的周围。是先把这些非GIS格式数据转化为GIS格式数据,然后再将其以一新图层加载到Mapcontrol中;还是直接文本文件中的数据读取后以新图层加载到AE的Mapcontrol中。如果是先将GIS格式数转化为GIS格式数据,如何用AE转换。


2007-4-14 16:51:37

这个需要首先将文本数据转换为GIS数据,ArcMap里面有这个功能的,AE是做二次开发的,不是一个工具。要加载到已经打开的数据中,还需要将Map的SpatialReference设置为你的文本数据定义的经纬度。

Posted by 蒋波涛 Gravatar Icon

2007-4-14 17:04:30

不能直接用AE吗,就是不用ArcMap


2007-4-14 17:36:55

不能直接用AE吗,就是不用ArcMap,因为我要做动态的,也就是每次显示的数据都不一样


2007-4-22 19:59:07

怎么定制htlmviewer实现查询?利用已经有的查询query的工具,在textFrame界面中有'>','<'这类的符号,填写后得到get querystring,到底这些查询由哪个js文件来处理,我应该修改哪些js文件?数据库表中怎么设计?比如查图层, 再查某个地点,怎么设计数据库啊?请大侠帮个忙,指点下,我是初学者,做个查询弄了好久.

Posted by 问题求教 Gravatar Icon

2007-4-24 0:53:10

"如ArcMap才1.36M,但它一旦启动,耗费的内存资源就远远大于这个数值。"
程序文件本身的大小并不能直接反应内存占用

Posted by yayima Gravatar Icon

2007-5-23 12:27:41

你好
我们正在规划一个电力行业的配电网GIS管理系统,希望能够找到一个开源的解决方案,系统为C/S下com+三次结构,服务器为win2000/2003server,SQL-SERVER数据库,delphi作为开发语言。如果有好的解决方案,编码工作可以外包给有相关经验的开发团队。谢谢!13302538621
陈先生


2007-5-24 23:52:14

我不是在软件公司,没有接触过类似的解决方案,呵呵。

Posted by 蒋波涛 Gravatar Icon

2008-1-19 14:12:50

我也喜欢C#,现在都不想用delphi了,想着都生气!真是成也萧何、败也萧何啊!

Posted by LCF Gravatar Icon

2008-9-8 0:05:19

C#如何用代码设置arcGlobeContol的界面大小?谢谢!

Posted by freda909 Gravatar Icon

2011-7-28 8:10:59

最近研究插件式框架,路过

Posted by wing Gravatar Icon

Leave a comment

Or, take a look at Archives and Categories

目录

存档