欢迎来到天天文库
浏览记录
ID:18292028
大小:362.00 KB
页数:17页
时间:2018-09-16
《常用flex ioc框架比较分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、常用FlexIOC框架比较分析IOC(InversionofControl),也称DI(DependencyInjection),是近年来在软件开发中变得非常流行的一种设计策略。众多的Flex开发者,探索出了诸如SpringActionScript、Parsley、Flicc和Swiz这样的IOC框架。什么是IOC?一言以蔽之,IOC是一种软件设计模式。借助IOC,可用一个独立的对象为其他对象的数据成员填充正确的实现,而不是由这些对象自己负责此项工作。这样做的好处有两个。第一,可将对象的数据成员声明为接口,从而将对象与其具体实现分离(即契约式设计
2、,designbycontract)。第二,可从对象中删除创建逻辑,可以使对象的用途更为明确。IOC容器提供一个框架,你可借此以一致和宣告的形式使用这个模式。将此模式和接口结合起来,可以创建出易于测试、使用灵活的对象。有关IOC模式更深入的讨论,请参看MartinFowler的文章InversionofControlContainersandtheDependencyInjectionpattern。Java和.NET的IOC框架早已建立,在Flex社区,近来也有不小的进展。本文将讨论Flex中的一些IOC框架的工作原理、使用方法,并对这些框架进
3、行比较。为了比较方便,我将在同一个工程(ProfileViewer)中使用SpringActionScript、Parsley、Flicc和Swiz这几个框架。IOC的概念一般有两种最常见的对象配置方法:·对象实例化(例如:myObject=newObject())·对象查找(例如:varmyObject=registry.getMyObject())而利用IOC,你可在一个独立层中实例化应用程序要用到的对象,并传入它们所需的依赖。具体来说,最常见的实现方法也有两种:·Setter注入(例如:instance.myObject=newObject
4、())·Constructor注入(例如:instance=newInstance(newObject()))一个IOC框架,通常由如下三个部分组成:配置、工厂和注入机制。配置我们可以在配置中描述对象之间的关系。最常用的配置描述方法是在文件中声明。这样的文件有时候也被称为上下文文件(contextfile)。也可以用元数据/注释(metadata/annotation),甚至直接在程序中描述配置。工厂工厂负责配置的解析和所有对象的准备工作,程序一旦运行,就可以根据需要取得这些对象。在经典的Spring框架(最流行的JavaIOC框架)中,所有对象
5、(我称其为客户对象)都由IOC容器负责准备,并且它们以接口形式声明自己的依赖。在配置文件中,被声明的依赖都被设置为对应的实现类。注入机制所谓注入机制,是指如何将工厂创建的对象实例注入到应用或其他对象。就SpringWeb应用而言,注入方法是通过web.xml来实现的。Spring会监听webapp上下文的加载事件,并利用钩子捕获类加载器的行为,从而分离出任何需被创建的对象。此后,若有需要,工厂将实例化对象,并填充它所需的依赖。当然在向应用返回对象之前,这些依赖本身也可能需要实例化。这个过程即所谓的“(将依赖与对象)捆绑在一起”。在Flex中,类的
6、加载原理有所不同,因此捆绑方法也就不同。目前有两种方法:·客户对象直接从工厂请求(已捆绑好的)对象·利用内置的Flex事件机制(用于实例化视图)触发注入到后面我们具体讨论框架时,这些概念会更容易理解。ProfileViewer介绍ProfileViewer是一个非常简单的应用,只有两个界面(一个登录面板、一个仪表盘),接下来我们就用这个工程比较、讨论四个框架。ProfileViewer使用了MVC(Model-View-Controller)架构和PresentationModel模式。说明:我将ProfileViewer建立自己过去看到的一些较
7、为流行的设计模式基础上,仅仅是一个例子,使用这些框架肯定还有其他使用方法。如果你觉得我的方法有任何问题,请一定告诉我。我非常乐意根据大家的意见和建议调整改进。本文所有例子的源代码可从flex-ioc-examplesproject下载。我建议打开这些源码,对照着阅读本文下面的内容时。高层架构开发GUI应用时,通常会用到MVC模式。我们就不在这里深入讨论MVC本身的细节了,如果有需要请参看可参看Model-view-controller。在此之上,我实现了服务层(见图1)。应用可在这里得到来自后端系统的数据。在本例中,我简化了这个部分的实现。最后,
8、我使用了PresentationModel模式,应用中每个视图都有对应的模型,模型包含了它的状态和逻辑。正常情况下,视图通过绑定表达式响
此文档下载收益归作者所有