按作者归档: jexchan

Get busy living or get busy dying…

IOC(DI) in Flex

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容器框架。 在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开发,个人比较喜欢这个框架,本站前面由Daniel也写了一篇Parsley的入门文章,很不错~~~严格意义上来说它不算一种MVC框架,属于一套Toolkit,你完全可以使用自己的MVC方式来组织) 另外这里一份代码,一个Sample,以不同的IOC框架来实现,应该对大家学习比较有用: http://code.google.com/p/flex-ioc-examples/ 希望大家能找到适合自己项目使用的IOC容器^_^

Flex Custom Component LifeCycle

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