2009年3月27日星期五

ArcGIS Server Java ADF 案例教程 6

ADF的逻辑结构

尼采说:“我没有肉体,我只有灵魂”,感情这哥们从不吃喝拉撒——咱就不从唯物主义去批判他了,反正咱ADF不一样,它可是有胳膊有腿、有思想有能力的四有框架。上面刚介绍完了ADF的物理组成,根据由表及里、由浅入深的认识论原则,现在我们开始认识一下ADF的逻辑结构。

在ADF的帮助中有一张MVC示意图,其中把视图和控制器合并在了一起,因为ESRI认为ADF的组件不仅仅在视图层,它们还影响到了Web应用流程,有控制器的功能。这种划分我感觉不太清晰,所以这里还是把控制器独立了出来。
图 3 ADF的MVC示意图

如图 3所示是我绘制的MVC示意图。ADF在视图层的表现是一系列的JSF组件;它们是通过控制器层的ADF组件渲染器输出的;最下层的是模型层。在ADF的模型中,WebContext是最为重要的对象,不管是GISResource(各种服务资源)还是其它的WebControl(WebMap、WebToc等等),都是在WebContext中进行管理的。WebContext可以看作在用户会话中存在的管理ADF的一个环境,至于这个WebContext是从何而来,马上在下一小节中会详细叙述。

浏览器中用户所能看到的Map、Toc等,在服务器上都是以WebMap、WebToc等JavaBean对象存在于用户的会话中;同时,这些对象作为WebContext的属性(attribute)被其包含。而Web应用中所用到的GIS服务(如Map Service、Geoprocessing Service等),在ADF中都是作为GISResource(如AGSMapResource、AGSGPResource等)来进行连接使用。这些不同的GISResource各自包含了各种不同的功能(GISFunctionality),这些不同的功能又会各自对应到WebMap、WebToc等对象上去。为什么需要在ADF的WebControl和GISResource之间加上GISFunctionality这一层呢?这主要是ADF为了统一不同服务数据源考虑,比如虽然AGSMapResource和AGSLocalMapResource是两种不同的GISResource,但是它们都可以在Map组件中进行地图浏览,因此ADF定义了AGSMapFunctionality这个功能,AGSMapResource和AGSLocalMapResource都分别实现了这个功能,Map只要调用这个功能就可以实现地图的浏览而不必关心后台的服务到底是什么类型的。

上面这个MVC示意图目前有个大概印象就可以了,因为你还没有真正地使用ADF,都理解了也不太可能;在后续的环节中,经常会过来看看这张图可能会有更加深入的理解,先就认个脸熟吧。

1 条评论:

匿名 说...

恩。。知道什么是天书了