Flex2.0实践指南

开发 后端
Flex2.0.1,是目前Flex的最新版本。用过的人都知道,相比于Flex2.0来说,Flex2.0.1的推出,是Flex功能上焕然一新的飞跃。

本文和大家重点学习一下Flex2.0实践方面的知识,Flex2.0.1,是目前Flex的***版本。有很多人预言,Flex2.0.1中很多新功能的定位,将直接面对Flash9,以及Adobe即将推出的Apollo项目。

Flex2.0实践

自从识得Flex以来,我便喜欢上了这个新技术。说它是新技术,也许有点欠妥。利用AS脚本在Flash中制作表单,这应该是很早以前的事情了,想来很多Flash高手现在仍然对Flex嗤之以鼻,也算是这个道理。其实Flex之所以能够得以流行,完全得益与Adobe给Flash带来的革新:ActionScript3.0。

Flex来了

我以前曾经在Flash中写过一些小程序,主要是为了获得良好的视觉效果。说实话,在所有我用过的IDE中,Flash的IDE的确很糟。界面很挤、帮助很少、动态提示不友好,而且,as脚本很难管理等等。所以,我对用Flash来做稍大一点的项目,从来都没奢望过。只到有一天,我偶然看到了Flex2。

Flex2.0.1,是目前Flex的***版本。用过的人都知道,相比于Flex2.0来说,Flex2.0.1的推出,是Flex功能上焕然一新的飞跃。有很多人据此预言,Flex2.0.1中很多新功能的定位,将直接面对Flash9,以及Adobe即将推出的Apollo项目。

***个Flex2.0实践

近期的一个B/S项目,我完全采用Flex来进行客户端开发。由于Flex提供了充足的通讯方式:HttpService、WebService以及RemoteObjectService调用。这三种方式都是异步的,并提供了回调事件,这种方式恰好是Ajax大行其道的原因。

基于项目的考虑,在项目中需要进行大量的数据插入、查询、报表、以及数据CRUD的操作,其实,ROS应该是***的通讯方案。不幸的是,ROS需要FlexDataService服务,对于多CPU的服务器,这是个高成本的投入,只能忍痛割爱了。因此,本项目采用HttpSevice作为通讯方案。

你是否需要框架?

说实话,在客户端的开发中,我从来没有认真考虑过框架问题。因为,对于HTML和Javascript组成的Web页面来说,的确没有一个很理想的解决方案。可是在Flex中,问题终于出现了。

总体来说,Flex2.0算得上一个独立的开发环境。这一点,类似与Java和.net开发环境一样。Java提供了JDK,.net提供了.netframework,而Flex2.0则提供了FlexSDK。我们的应用,写在ActionScript的类和一个个的MXML文件中。对象与对象之间,通过事件和方法调用进行通讯,不同的对象往往需要共享相同的通讯组件和数据、甚至共享代码和变量。因此,当写了十个以上的类时,你就会发现,代码乱的一团糟。

联想在Java中使用Spring的经验,我立即意识到框架的重要性。那几天,我一直在Adobe官方网站上转悠,试图找到些线索。于是,我找到了Cairngorm。

Cairngorm框架

Cairngorm框架,用作者自己的话来说,只能叫做MicroArchitecture(微型架构)。的确,Cairngorm只是一些设计模式的应用,包括FrontController模式、Commander模式、以及Proxy模式等。其原理非常的容易理解:

FrontController负责注册所有的事件类型以及事件发生时所调用的Commander。当组件之间需要通讯时,组件向FrontController发出event并在event中传递参数,然后FrontController调用Commander完成任务并更新model中的数据。所有的model中的DataObject都是bindable的,这样,所有的组件自动实现了数据的更新。

ModelLocator是所有modeldata的核心。系统用到的所有公共数据都存储中ModelLocator中,Commander通过ModelLocator进行数据通讯。通讯采用Proxy的方式,所有的通讯方式都被隐藏在Proxy的后面,这样当更换通讯模块的时候,不会影响到其他的代码。

当然,由于Flex2.0提供的几种Service方式差异很大,所以,Proxy技术并不能完全的实现代码隐藏。但这种技术本身,给我们提供了很大的参考价值。

简化的方案

Cairngorm的确给我们带来了全新的理念,但我只打算使用它的部分理念,因为,对于一个中小型的项目来说,Cairngorm还是显得复杂。Cairngorm的设计目标是,***程度上减轻组件之间的耦合,而把所有的对象之间的通讯都改为事件。这样,在减低了耦合性的同时,降低了系统的性能和可测试性。

在我的设计方案中,我去掉了FrontController、Commander等概念,保留了ModelLocator、Event和Proxy。系统流程如下:ModelLocator负责注册和派发事件,存储中心数据。组件通讯采用Event方式,同服务器的通讯采用ServiceProxy。

所有的代码都写在Action类中,所有的Action类都实现了IResponder接口。这样,ServiceProxy就可以把异步事件传播给Action对象。每个Action对象实例化一个ServiceProxy类,并在组件中调用action对象进行操作。如果需要通信,则由组件在ModelLocator中派发事件,另一个注册了该事件的组件获得了通知。

这是一个简化了的设计方案,虽然增加了对象之间的耦合,但整体思路更加清晰,代码量和编译后的swf文件大小都得到了优化。

FlexBuilder2心得

FlexBuilder2完全基于Eclipse平台,这给项目的设计带来了极大的性能改善和增强的用户体验。

方便的功能:

可选的自动编译项目,这样在保存后系统立即更新到bin目录,并能够立即检查出代码中的错误并给出提示;
可以选择清除所有输出,系统将自动重新进行编译;
强大的调试功能;
CTRL+ALT+↑向上复制一行,CTRL+ALT+↓向下复制一行,这个功能在代码编写中非常的实用;
可以改变代码文件的文件编码;

不足之处:

无法选择打开项目。如果一个项目从其他地方复制过来,在FlexBuilder中在无法打开,只能新建一个项目,然后把这个项目覆盖上去;
不能自动在Developer视图和Debug视图之间进行切换,甚至连快捷键都没有提供;
编辑器不支持鼠标拖拽复制,只能采用剪切和粘贴,相当不便;
调试窗口中不能对变量进行鼠标悬停提示,也不能把变量直接拖拽到watch窗口,变量查看相当不便;
很多自定义类的方法在动态提醒中无法显示参数定义;
不能对import列表进行优化。虽然提供了对import的整理功能,但这个功能只在类中可以使用,在mxml中则无法使用;
缺少代码格式化功能;
对xml文件支持不好,或者说干脆不支持;
似乎说了很多的缺点,但其实只是因为太关注,所以太看重Flex2.0。Flex3.0已经在研发的过程中,随着Apollo项目的推出,Flex将会有一个更加值得期待的未来。

【编辑推荐】

  1. Flex2.0.1新特性和所做改进概要
  2. 揭露Flex2.0的几大误区
  3. 技术分享 Flex2.0文件上传如何实现
  4. FlexBuilder3.0与Eclipse3.4的***结合
  5. Flex ComboBox和Datagrid组件用法指导

 

责任编辑:佚名 来源: csdn.net
相关推荐

2010-07-28 09:10:41

Flex2.0

2010-07-28 08:44:12

Flex2.0

2010-08-10 15:38:32

Flex2.0

2010-07-28 09:24:31

Flex2.0

2010-08-10 14:18:15

RationalFunFlex

2010-08-10 14:25:42

SilkTestFlex

2010-08-05 14:32:16

Flex框架

2010-08-09 12:42:16

Flex module

2010-08-12 15:20:49

Flex Builde

2010-07-29 17:11:03

Flex

2010-08-04 14:07:59

Flex事件机制

2010-07-29 09:31:28

Flex编程模型

2010-08-04 15:37:31

Flex图表

2010-07-30 10:13:38

Flex控件

2010-08-02 13:35:59

FlexBuilder

2010-08-04 14:28:01

Flex组件

2010-08-09 10:21:56

XMLFlex

2010-07-28 14:59:26

Flex字符串

2010-08-04 09:06:21

Flex安装

2010-07-29 17:15:55

Flex
点赞
收藏

51CTO技术栈公众号