| 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容器^_^

Cairngorm 3 Beta发布

10月 10th, 2009 | No Comments | Posted in Cairngorm, Flex3, adobe

期待已久的Cairngorm3终于发布了,虽然只是beta版,但可以看出这次版本带来的变动那是相当的大阿,现在的Cairngorm3已经不仅仅是作为一个特定MVC实现了,想尝鲜的朋友可以访问官方站点下载了。

http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm+3

这里也有几篇相关的文章介绍:

http://blogs.adobe.com/auhlmann/archives/2009/10/cairngorm_3_bet.html

http://www.herrodius.com/blog/216

http://brantfordtweets.blogspot.com/2009/10/cairngorm-3-looks-interesting-it-more.html

Aptana IDE推荐使用

08月 14th, 2009 | No Comments | Posted in Flex3, Tools

虽然说Eclipse IDE也有不太好的地方,对内存暂用也确实比较大,尤其当作Flex开发时,2G内存跑起也有点吃力,但它最好的地方便是插件机制不错,正有了这种插机制才有了遍地开花的优秀插件出来。

今天推荐的Aptana IDE其实也是建在Eclipse平台之上,不错的是它集成了不少开发环境,安装完后根据提示直接更新,便可安装上各类开发环境,对于有不同语言环境需求的朋友确实不错,尤其是有ROR及Python开发需求的(试用了一下,感觉还不错)。

Aptana官方站点:

http://www.aptana.com/

由于Flex plugin 本身也是基于Eclipse,当然,我们可以将Flex开发环境也一并集成到Apanta中去

方法很简单:

在Aptana安装目录下建一links文件,再建扩展名为link的文件,我建的文件名为

com.adobe.flexbuilder.feature.core.link

文件内容也很简单,也就是将路径指向你机器中已经安装好的Flex,如我的是:

path=D:/programs/Adobe/Flex3

再重启一次Aptana,看看是不是就可以直接建立Flex项目文件了…

截个当前我机器上Apatan可创建的项目类型图,HOHO,好多:

2009-08-14_021732

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

360Flex及Max2008 sessions

01月 20th, 2009 | No Comments | Posted in 360Flex, ActionScript3, Flex3, MAX2008, RIA, adobe

对于Flex/AIR/BlazeDS/LCDS学习者来说,360Flex及Max2008应该是大家都想参加的会议,但对于大部分人来说,仍是价格不菲,不过还好,最近的360Flex及MAX2008大会的技术演讲大部分均有视频记录,而且效果非常好,相信对大家来说是份不可多得的好资源~~~观看这些视频通常有下面几种方式:

直接通过Adobe.com官方站点访问在线观看:

MAX2008:

通过Adobe Media Player订阅观看,订阅地址如下:

MAX2008:

 

360Flex:

http://sessions.adobe.com/360FlexSJ2008/feed.xml

 

还可以通过以下iTunes地址进行观看:

MAX2008:

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewPodcast?id=299639895

最近接触的东西很多…好多还需要消化

01月 16th, 2009 | No Comments | Posted in Flex3, Personal, RIA, Tools

由于所在项目组做的是对公司未来非常重要的产品,加上目前在China这边的开发人员对产品架构和细节都不是特别了解,公司接连派NA和CANADA的同事过来为我们指点,学到了不少东西,有些属于知识掌握方面,有些属工具相关,由于花的时间也不够,好多都一知半解,需要一一消化,有些还需要深入,先将这些相关知识列下来,过段时间再来对比,看吸收掌握了多少,呵呵

Java相关:

Technology Stack:

  • JMS/ActiveMQ-Messaging
  • Spring – Configuration /Wiring
  • Log4J – Logging
  • AspectJ – Auditing, Performance Metrics
  • CXF – WebService
  • Hibernate – JPA

 

Tools

  • Subversion / Jira
  • Maven
  • Junit
  • Cruise Control
  • CheckStyle /Clover
  • Crucible

 

Flex相关:

  • Coding Standard
  • Flex + Blaze/LCDS + Java
  • FlexUnit
  • Flexcover
  • Cairngorm(Current) / Mate(Future)

关于[managed]、[transient]、[RemoteClass]的解释

01月 13th, 2009 | No Comments | Posted in Flex3

当在使用Flex并结合BlazeDS或LCDS进行企业应用开发时,经常会碰到[managed] [transient] [RemoteClass]这三个元标签(metadata tag)的使用,但似乎相关的文档很少([RemoteClass]稍微多点),通过一番搜索,找到了比较细致的解释,附上链接及相关原文,备查:

http://weblogs.macromedia.com/lin/archives/2007/02/how_to_get_sing.html

1. To represent a server-side Java object in a client application, you use the [RemoteClass(alias=" ")] metadata tag to create an ActionScript object that maps directly to the Java object. You specify the fully qualified class name of the Java class as the value of alias. This is the same technique that you use to map to Java objects when using RemoteObject components.

2. You can use the [RemoteClass] metadata tag without an alias if you do not map to a Java object on the server, but you do send back your object type from the server. Your ActionScript object is serialized to a Map object when it is sent to the server, but the object returned from the server to the clients is your original ActionScript type.

3. To create a managed association between client-side and server-side objects, you also use the [Managed] metadata tag or explicitly implement the mx.data.IManaged interface. The [Managed] metadata tag ensures that the managed Contact object supports the proper change events to propagate changes between the client-based object and the server-based object.

More info about this:

http://www.mail-archive.com/flexcoders@yahoogroups.com/msg57899.html

You could simply declare that a particular concrete property on your client type was "transient" using [Transient] metadata - these properties wouldn’t be included when instances were sent back to the server.

http://www.mail-archive.com/flexcoders@yahoogroups.com/msg38984.html

Try tagging the properties that you don’t want managed in your [Managed] AS class as [Transient]. This should prevent changes to them from being logged/committed.

怎样移除当前的Flex License

01月 4th, 2009 | No Comments | Posted in Flex3

当你购买了正版的Flex License后,或要从以前的Standard version升级到Pro版本(或者不小心以前输入过其它的Serial Number)…需要将以前的License移除,使得能输入新的License,则需要移除license.properties这样一个文件,路径如下:

Windows: %ALLUSERSPROFILE%\Application Data\Adobe\Flex\license.properties
Mac: /Library/Application Support/Adobe/Flex/license.properties

将此文件移除后,重新启动Flex Builder,Ok,可以输入新的正版SN了。