| Subcribe via RSS

IOC(DI) in Flex

12月 10th, 2009 | No Comments | Posted in ActionScript3, Flex3, Tips Tricks, ioc

IOC:Inversion of Control(反转控制)

DI:Dependency Injection(依赖注入)

IOC一词来源于Martin Fowler发表的一篇文章,《Inversion of Control Containers and the Dependency Injection pattern》

那是什么被反转控制了?实际上指的是对象之间的依赖关系被反转控制了,原本由类自身维护所需对象实例的创建现在转由外部的IOC容器来维护。这种维护对象实例化的负责方被反转了。而依赖注入(DI)呢?意思更加明确,即获得所依赖对象的方式是由IOC容器从外部直接注入进来,而非我们通常的使用new的方式在类中来完成。

在JAVA中,大家熟知的Spring框架其核心内容便是反转控制及依赖注入。

使用IOC(DI)有什么好处?大致来说有两点:

1、类或模块之间的耦合度降低了,代码更易重用和维护

2、更加便于编写可测试的代码

随着面向对象的Actionscript3.0的推出,尤其是Flex在企业级应用中越来越多的应用,Flex(Flash)应用框架也越来越多,也有不少框架实现了IOC的功能,当然也包括一些独立的IOC容器框架。

image

在as3中实现IOC,核心是使用as3中的反射来完成的,相对来说,as3中的反射比起Java来说确实弱了不少,主要是利用describType返回的属性XML进行解析,而这样对性能会有一定的影响,若在as3中大量使用反射的话,一定要考虑到这一点. 另外,关于使用的配置文件,有以XML来进行的,有以MXML来实现的,也有两都均支持的,需注意的是以XML来实现的好外是我们可以直接更改外部XML而不需要重新编译相应源文件,而若使用MXML的话当你更改配置的话需要重新进行编译.

当然,目前以as3实现的IOC也有很多了,主要两在块:

  • 独立的IOC容器:

Flicc

smartypants-ioc (名字取得不错,呵呵)

SwiftSuspenders (比较小巧)

  • 实现了IOC功能的完整框架:

Spring Actionscript(原名:Prana,此框架现已归入Springsource,几乎是Spring IOC实现的as3翻版,熟悉Spring的Java开发人员几乎不需要什么过渡就能理解)

Swiz(也属于比较成熟的框架了)

Robotlegs(MVCS框架,可集成使用其它任何DI容器,最初建立在smartypants-ioc,目前自身使用SwiftSuspenders)

Parsley(由PowerFlasher开发,个人比较喜欢这个框架,严格意义上来说它不算MVC框架,属于一套Toolkit,你完全可以使用自己的MVC方式来组织)

另外这里一份代码,一个Sample,以不同的IOC框架来实现,应该对大家学习比较有用:

http://code.google.com/p/flex-ioc-examples/

希望大家能找到适合自己项目使用的IOC容器^_^

Tips: Flex3 Debugging in Windows7

05月 11th, 2009 | 2 Comments | Posted in Flex3, Tips Tricks

[更新一下:在后续版本的window7中已经不存在这个问题了]

最近尝鲜,装了个windows7,感觉用着挺爽,无论是兼容性、速度还是用户体验都不错,我装的是Build 7068版本,但在用Flex开发时遇到一个问题,使用Flash Player Debug version无法debug,这下痛苦了,毕竟这是目前吃饭的工具,还好,在强大的Google帮助下,找到了Solution,请看步骤:

  1. Run your application in debug mode
  2. Right click over the Flash movie
  3. Change the option from Localhost to “Other Machine”
  4. Type the IP address 127.0.0.1
  5. Click Connect
  6. Debug again

很简单,请看截图:

2009-05-11_234038

Flex Custom Component LifeCycle

05月 6th, 2009 | 1 Comment | Posted in ActionScript3, Component, Flex3, LifeCycle, Tips Tricks

谈到Flex学习,大家都知道,其实Flex入门挺容易的,尤其是对其它面向对象语言像Java或C#比较熟悉的开发人员,直接阅读Flex的代码通常也没什么问题,但从另外一方面来说,要想深入学习Flex并灵活运用的话,其实并不那么容易,其中,对组件的生命周期(LifeCycle)的理解则是非常重要的一关,个人感觉的话,若充分理解并掌握了组件的生命周期才算真正Flex入门了:)

 

前段时间,与公司同事分享了一下自己对LifeCycle的经验,当时为了有助于宏观上理解整个Flex应用程序及组件的LifeCycle,自己画了两幅图,分享给大家,希望对大家有用~~~

点击小图可看完整的大图:)

【注】若大家要引用或转载的话,请注明出处,先谢谢了

applifecycle

lifecycle

Tips and Tricks:让Text具有按钮的功用

01月 22nd, 2009 | No Comments | Posted in Flex3, Tips Tricks

通常我们用Button或LinkButton时,里面的Label文字不能换行(当然也可以,稍微要麻烦点),有些时候可以用Text组件来替代,但要让Text组件具有按钮的功能需注意两点:一是当鼠标移到Text上去时呈手势形状,二是鼠标滑入滑出时显示出不同的状态。其实也简单,不过也不是想像那么简单,呵呵。

 

看代码及效果:

   1: <?xml version="1.0" encoding="utf-8"?>
   2: <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 
   3:     layout="vertical"
   4:     backgroundColor="#CCCCCC"
   5:     creationComplete="init()">
   6: <mx:Script>
   7:     <![CDATA[
   8:         import mx.controls.textClasses.TextRange;
   9:         
  10:         private function init():void {
  11:             myText.text = "Welcome to my blog:" + "\n" +
  12:                             "www.jexchen.com";
  13:         }
  14:         
  15:         private function onRollOver():void {
  16:             var tr:TextRange = new TextRange(myText, false);
  17:             tr.color = 0xff3333;
  18:         }
  19:         
  20:         private function onRollOut():void {
  21:             var tr:TextRange = new TextRange(myText, false);
  22:             tr.color = 0×000000;
  23:         }
  24:     ]]>
  25: </mx:Script>
  26:     <mx:Text id="myText"
  27:         color="#003e7e"  
  28:         useHandCursor="true" buttonMode="true" mouseChildren="false" 
  29:         rollOver="onRollOver()"
  30:         rollOut="onRollOut()"/>
  31: </mx:Application>

点击查看效果:

http://www.jexchen.com/demo/handcursor/HandCusor.html