Flex Viewer设计模式
Flex Viewer的设计原则就是“simple”,方便开发人员定制和扩展。Flex Viewer的源代码是可以自由使用的,因此可以很方便的在Flex Viewer基础上进行定制和扩展。
1)事件总线(Event Bus)
Event Bus 是Flex Viewer中组件用来进行通信的模块,其本质是是一个全局的事件调度器,负责各个事件的分发。Event Bus是在EventBus类中实现,在这个类中定义了一些静态代理函数,保证各个组件对Event Bus的访问。
下面介绍一下ConfigManager如何加载配置文件,然后通过Event Bus发送给其他组件。
a)
在ConfigManager的构造函数里添加CONTAINER_INITIALIZED事件的侦听。
当侦听到CONTAINER_INITIALIZED事件后,Init函数响应。CONTAINER_INITIALIZED事件是在SiteContainer构造完成后分发的
b)
当ConfigManager将配置文件解析完成之后,就会分发CONFIG_LOADED事件。解析后的配置文件打包成一个ConfigData和事件一起分发。
c)
其他需要ConfigData的组件添加对CONFIG_LOADED事件的侦听。下面是WidgetManager的init函数,添加了对CONFIG_LOADED事件的侦听。
2)依赖注入原则(Dependence Injection)
依赖注入是指将类之间的关系通过第三方进行注射,不需要类自己去解决调用关系。目的是降低类之间的耦合度,实现的时候就是把依赖从编译时推迟到运行时。
在Flex Viewer 中使用了DI原则。通过使用配置文件的方式将对界面的构建,服务的调用推迟到运行时,而不是在编译时就固定好。即编译时刻程序不知道使用哪些图片来创建UI,不知道调用哪些地图服务,只有当配置文件被加载到Flex Viewer 中时,这些要素才被固定。因此这就为程序的发布提供很大的灵活性,界面修改,服务更换只需要编辑配置文件,而不需要重新编译。
3)国际化(Internationalization)
国际化(Internationalization)和本地化(localization)是有区别的。国际化是支持多国语言,而本地化是只关注于本国语言的支持。因为Flex Viewer不是一个完整的产品,所以他的国际化和本地化没有完全支持,只是提供了示例代码,而不是完整的实现。目前Flex Viewer提供了两种语言的支持,英语 (US English) 和法语(French)。
a)
创建资源文件
在Flex Viewer 工程的源代码nls目录下的en_US和 fr_FR目录下都有WidgetTemplateStrings.properties文件,这个文件就是资源文件,Flex 编译器会自动识别properties文件并编译。
properties文件中字符串的定义很简单,是[name,value]对,中间用等号隔开
b)
在代码中使用资源文件
使用这些资源文件,首先定义这些资源文件:
然后创建nlsString函数去资源文件中查找特定的字符串。
例如,想查“close”, nlsString(“close”)即可
4)自定义本地化
对Flex Viewer进行本地化(比如对简体中文的支持),推荐使用修改widget配置文件的方式来做,而不是通过国际化的方式。
在widget配置文件中定义需要本地化的字符串,然后通过解析配置文件,完成本地化工作。当需要修改显示的内容时,只要编辑配置文件就可以了。
5)日志和错误处理
记录日志以及添加错误处理逻辑,能够很好的保证程序的健壮性,也能够更加快速的定位到问题,在Flex Viewer中提供了日志记录和错误处理的能力。
a)
日志记录:
在SiteContainer中,定义日志记录模块,用来记录RPC远程调用错误信息。
b)
错误处理:
ActionScript 提供了强大的错误处理能力,但flex编译器不像java那样强制捕捉可能的错误或异常。在flex 编程中,程序员要么使用ErrorEvent要么使用try-catch去处理错误。一旦捕捉到错误或者异常,最好通知用户发生了什么错误并说明什么情况下会产生这个错误。
在Flex Viewer中,只需要调用showError()函数即可讲错误信息返回给用户。showError()函数是BaseWidget中定义的public方法,只要继承于BaseWidget的Widget都可以调用。
Flex Viewer部署
1) 部署 Flex Viewer应用程序
a)
导出release Build。
b) 将bin-release目录的内容拷贝到web服务器即可,详细请参考IIS 或其他web服务器如何发布网站。
2) 部署Widget到Flex Viewer应用程序
将一个新开发的Widget部署到已经发布的Flex Viewer应用程序中去的步骤如下:
a)
拷贝Widget.swf到需要部署的目标位置,即部署Flex Viewer的web服务器或其他web服务器,确保有对其访问的权限。
b)
修改Flex Viewer的配置文件,即config.xml
如果widget不和Flex Viewer在同一个web服务器上,则url需要使用全路径
c)
刷新Flex Viewer程序。
新的widget就已经出现在Flex Viewer程序中了。
4) Security Considerations
a)
crossdomain.xml
在flex开发中,经常会遇到安全沙箱的问题。Flex 不能进行跨域访问。解决这个问题,就需要将crossdomain.xml放置到发布服务的web服务器的root目录下。
crossdomain.xml的内容如下:
b) 网络资源代理(Internet Resource Proxy)
在一些情况下需要访问一些服务(例如GeoRSS feeds),发布这些服务的web服务器又没有配置crossdomain.xml,那么只能通过网络资源代理来访问。