FlexViewer框架解读(转)

Flex Viewer是ESRI公司推出的可以高效开发基于WEB的地理信息应用系统的一种基本架构。它帮助你屏蔽了底层繁琐的操作,比如通信机制。此框架和服务器端的通信是基于Web Service的。在服务器端,发布出你的服务,比如地图服务,前端只需简单的调用操作。开发人员只需关注你的功能模块设计。

1、Widget开发

在Flex Viewer中,采用Widget的方式进行模块设计。每一个模块都是一个Widget,具体说是BaseWidget。

类的关系如上图所示,IWidgetTemplate和IBaseWidget是接口,WidgetTemplate和BaseWidget分别实现它们。在初始化BaseWidget时,会依赖IWidgetTemplate去初始化每个模块的title、icon等属性。

上图很清晰地给出了一个Widget的处理流程图。要说明的是,由于BaseWidget继承了Module,所以每一个Widget都是一个 Module。好处很多,延迟加载,高内聚性,模块之间几乎没有侵入性。

2、总体上Container结构

图中提到了Flex Viewer Container,整个框架看着是一个大的Container,而这个Container是有一些高内聚低耦合的组件组成,如下图:

这里可以看到整个框架是由几个组件构成,ConfigManger用来管理配置文件,WidgetManger管理所有的Widget。等等。。。 SiteContainer.mxml持有对这些组件的引用。

3、核心事件处理
因为Flex采用事件机制,那么,在Flex Viewer中各组件(* Manager)之间通信时怎样完成的呢?这里就提到了Flex Viewer中核心类:EventBus. 注意到EventBus采用单例模式,保证在整个框架中只有一个EventBus。SiteContainer.mxml中提供了一系列静态的代理方法可以访问EventBus。

当上图中每一个组件(* Manager)初始化的时候,都会监听相应的事件;而SiteContainer会把监听任务委托给EventBus,并由EventBus统一分发事件。通过这种发布/订阅的消息模式,组件之间可以轻易交互而不用直接访问组件中的方法。所以,这种方式使组件解耦,可复用性很高。

EventBus中使用的事件类型都是由AppEvent.as这个类定义,它负责帮助EventBus在各个组件间传递消息。它是一个自定义事件,负载着数据传递的功能。

总结一下吧,Flex Viewer是基于事件机制,使用模块化设计,每一个模块负责各自的任务,互不侵入。模块之间的消息传递通过EventBus实现。自定义Widget编译完在各自的配置文件中配置路径、图标等信息,并在config.xml中添加此配置文件的路径信息,最后由ConfigManager统一加载 config.xml文件
原文地址:https://www.cnblogs.com/gisdream/p/1895960.html