Flex 2.0实践

自从识得Flex以来,我便喜欢上了这个新技术。

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

Flex来了

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

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

第一个Flex实践

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

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

你是否需要框架?

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

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

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

Cairngorm框架

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

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

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

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

简化的方案

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

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

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

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

Flex Builder 2心得

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

方便的功能:

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

不足之处:

  1. 无法选择打开项目。如果一个项目从其他地方复制过来,在Flex Builder中在无法打开,只能新建一个项目,然后把这个项目覆盖上去;
  2. 不能自动在Developer视图和Debug视图之间进行切换,甚至连快捷键都没有提供;
  3. 编辑器不支持鼠标拖拽复制,只能采用剪切和粘贴,相当不便;
  4. 调试窗口中不能对变量进行鼠标悬停提示,也不能把变量直接拖拽到watch窗口,变量查看相当不便;
  5. 很多自定义类的方法在动态提醒中无法显示参数定义;
  6. 不能对import列表进行优化。虽然提供了对import的整理功能,但这个功能只在类中可以使用,在mxml中则无法使用;
  7. 缺少代码格式化功能;
  8. 对xml文件支持不好,或者说干脆不支持;

似乎说了很多的缺点,但其实只是因为太关注,所以太看重。Flex 3.0已经在研发的过程中,随着Apollo项目的推出,Flex将会有一个更加值得期待的未来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值