设计模式在GIS开发中的应用

 

现代计算机软件产业已经经历了多年的洗礼,在如何架构合理的软件模型,如何让软件程序具有更好的可扩充性上已经积累了丰富的经验,设计模式正是很好的代表。对于GIS系统开发人员来说,应该充分利用这些软件产业中已经非常成熟的经验模型,并将其在GIS开发中更好的发挥,构造出稳定的、灵活的、方便扩充的GIS应用系统。本文利用状态模式并采用在ESRI公司的MapObjects组件上的开发实例来阐明如何在GIS中应用设计模式。

关键字:GIS,设计模式,MapObjects

 

前言:

   计算机软件开发从最初的结构化程序设计发展到现在的面向对象程序设计,开发人员一直都在探索如何让程序在具有稳定性的基础上具有良好的可扩展性,在不影响原有系统稳定运行的情况下,让系统支持新的特性和功能,如何对已有的开发经验再利用以及如何缩短开发人员交流过程等。eric等人提出的设计模式正是回答这些问题的最好的答案。计算机软件设计模式既在软件设计中可以采用的一套比较固定的成型的方法,经验和理念。现在设计模式已经深入到了从软件设计到开发的各个阶段,特别是在面向对象的程序设计中,适当利用设计模式可以达到事半功倍的作用。GIS应用系统是与计算机信息技术充分结合的一种信息系统,也是一个快速发展的新兴行业,在实际开发和应用中同样会遇到软件开发所遇到的各种问题,作者发现利用设计模式可以很好的给予解决。本文通过利用Miscrosoft.netc#语言和MapObjects开发的GIS应用系统来一步步说明如何在系统中采用状态模式来达到系统可扩展性和系统稳定性之间的平衡。

1.GIS系统中的工具和命令

   熟悉GIS系统的读者都知道,在应用GIS地图系统的时候一般用到两种类型的手段,既工具和命令。命令是指在点击某个功能按钮的时候该功能立即执行,比如点击全图工具栏按钮后地图马上将地图转到全图的状态,命令执行完可以继续点击其他工具按钮来执行其他的命令。工具则不同,工具的执行则要求用户在地图上进行相关的操作,比如当用户要求将地图窗口放大到某一个区域的时候,可以选择拉框放大工具,之后只要在某个区域用鼠标进行拖拽拉框,就可以将地图放大到该区域,工具命令执行完毕后,不会退出该状态,而是一直保持。此外工具和命令在一般情况下不会冲突,执行某个命令并不会改变地图的工具状态。   在的gis应用中都会提供常用的地图工具和命令,比如放大、缩小、漫游、全图等等,但是在实际开发中用户一般都会提出和本专业相关的各种特殊的要求,需要在原来工具和命令的基础上增加具有专业色彩的功能。下面以MapObjects为例说明如何进行功能的扩展,并通过对比的方法说明采用设计模式进行开发的优势。

2.采用通常的方式对功能进行扩展

    2.1工具和命令的创建和组织方式:

    .net工作环境下,ToolBar组件上的每个ButtonClick事件都对应到应用程序中

的同一个方法,由于每个Button中具有tag属性(以下通称为标签值,用于区分不同的按钮事件),我们可以在该函数中通过对tag值的判断来确定当前要执行何种命令或采用何种工具。可以把调用命令的每段程序封装到一个个独立的函数当中,如果是工具的话,可以在当前应用中设置工具号,这样在MapControl的鼠标按下等事件中就可以知道当前要执行的命令。这样命令的执行和应用程序是混合在一起的,如下图所示。

                            

如图所是如果要增加新的工具或命令需要直接在应用程序中进行修改,比如增加新的命令,就要求增加一个新的命令按钮,并为其设置新的标签值,在应用程序中增加相关的函数来完成该命令,在响应事件中也要修改相关的判断语句,当判断出要执行该命令的时候,调用该函数。如果是增加新的命令,还要在控件鼠标的事件中进行相应的改动来执行新的命令。

    如上所述既为一般方法下开发gis应用系统的步骤,我们可以发现当要对系统扩充的时候需要对原有程序进行多处的修改,这样破坏了原有系统的封装性,不仅新的功能不容易测试,对原有的功能也可能会造成一定的影响,我们上面的功能只是列出了GIS一小部分功能,在实际应用中会有多达上百中的功能,所以如过采用此中开发模式,对于系统扩展和调试都是很大的挑战。

3.采用状态模式对功能进行扩展

   当某个对象具有不同的状态值的时候,我们说这个对象处于不同的状态,在对象的每个不同的状态,外部所能应用到该对象的方法,或该对象能够引发的事件可能是不相同的。具体的在GIS中当地图处于编辑状态,浏览状态等各种状态的时候能够在地图上进行的操作是不同的。即使在浏览状态下,由于我们选择工具的不同,应该说显示地图的状态严格来说也是各不相同的。我们可以说地图处于漫游状态,缩放状态等。

   如果某个对象具有不同的状态,那么如果不小心处理的话,各种状态混合在一起很容易造成设计和开发的混乱,采用状态模式则很好地解决了这个问题。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值