ArcGIS Engine的开发到底难不难

        ArcGIS Objects类库号称除微软之外的世界第二大类库,而ArcGIS Engine的类库是源自ArcGIS Objects的类库,它把核心的与常用的类库都囊括了进来。对于初学者而言,面对如此多的类库及其错综复杂的关系,ArcGIS Engine的开发当然难,但是这种难也不是绝对的。ArcGIS Engine的开发说到底是一种对接口的开发,这一点与一般的二次开发很不一样,接口的概念与C#Java中的接口概念也无二致。但ArcGIS Engine的开发特别强调对于接口的使用,几乎整个二次开发就是围绕着接口而展开的,反而对于类的利用很少,类不过是为接口提供实例化对象而已,这一点有悖于传统的对接口和类的根深蒂固的认识,类继承于接口,直接使用类开发就行了,类必然会实现它所继承的接口的功能,更重要的是它可以包含不止一个所继承的接口或类的功能。通过类实例化的接口来调用其功能函数就显得多此一举。

        很多参考教程或培训资料一开始就介绍组件或者类库,而不把接口说清楚,也不说明它的核心作用,那就是隔靴搔痒了,因为对于它后面的实例的介绍或者代码的编写,处处都是通过接口展开的。对于面向对象语言基础有所了解的学习者根本就体会不到接口的核心作用,他们认为类才是最重要的。但是ArcGIS Objects的设计者几乎对于每一个类都配备了接口,即使一个接口只有一个类,它也要设计出一个接口来,这样无疑增加了类库的复杂性,增加了开发的难度,只是便于他把开发统一成基于接口的二次开发。

        所有的功能都是在类中真正实现的,接口不过是定义了一组相似的方法或功能,但一个类它通常会继承不止一个接口,因为它所有的功能几乎都有相应的接口在规定,当需要使用相应的功能时,它也不是直接调用其功能方法,而是跳转到相应接口(因为接口无法实例化,必须通过其他类来实例化),再通过接口来调用其方法,这种方式在ArcGIS Engine开发里有个专业术语叫QI(接口查询)。这个QI实际就相当于JavaC#里面的向上转型或向下转型。这种用法在面向对象的思想里面也有说明,他的作用主要就是体现了其多态性、继承性、封装性的特点,想必在ArcGIS Objects里面的开发它也是对工厂设计模式,适配器设计模式,装饰模式等各种设计模式应用的出神入化了,以致于处处都体现了它多态性、继承性、封装性的(在二次开发中实际是面向接口的开发)设计特点。这种设计虽然很高超,也无疑是一种良苦用心,但似乎并不是照此做就能体现出它的优越性来,反而有许多地方是不必要的,因为它增加了工作量也显得过于复杂累赘。好在对于ArcGIS 产品Web的开发中,设计者已经大大简化了这种工作量,比如在面向Flex 或者Javascript的开发里面就没有使用过多接口,在代码的工作量上大大减轻了开发者的负担,也便于二次开发者的理解与掌握。

        对接口有了一个基本的认识,就可以进一步去理解对象模型图(OMD)了,OMD对于用户理解ArcGIS Objects是一把钥匙,OMD几乎就是ArcGIS Objects的一幅全景图,当然这种全景只是一种综合的概略图,让读者对于ArcGIS Objects各种接口与类,及其相互之间的各种复杂的继承,组合,依赖,聚合的关系有一个总体认识。

        有些人认为学习ArcGIS Engine开发的捷径就是直接看开发帮助文档与示例代码,但这对于初学者来说,是不切实际的,让一个连接口跳转都还不明白的人去看示例代码和帮助文档,无疑是看天书。帮助文档与示例代码当然是极为重要的学习和参考资料,但这一点至少要在懂得ArcGIS Engine面向接口的开发模式后才能去利用的,只有这样学起来才能有的放矢,得心应手,举一反三。

        要精通一门技术,多练是必不可少的过程,学习AE同样需要多练,对于它的每一个重要功能最好都能实践一遍,同时还要善于总结,分析AE开发的业务逻辑,总结其开发的模式。对于同一个功能,在AE中可能会有多种开发方法,也不妨都尝试一下,就如加载数据,就有控件方法,工具命令,构造工作空间以及直接拖工具按钮等多种方式。对功能的熟悉也是一个筑造地基的过程,地基打好了,对AE的体系结构以及组件类库的认识也就一目了然了,这种认识是直观的也是深入的,在潜移默化中就会进行的。掌握了AE的开发模式,就是知晓了AE开发之道,其他的就都只是技的层面的运用。

        最后总结一下:AE开发的关键是对于接口的理解与运用,AE开发功能的实现基本都是通过接口方法实现的,了解和掌握这种基于接口的开发模式,AE的开发就不是难事了。

你可能感兴趣的:(arcgis,库,对象)