`
longgangbai
  • 浏览: 7331266 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Flex 依赖注入

阅读更多

了解依赖注入

众所周知,面向对象设计能很好得控制类的功能(对于开发人员,你需要灵活得使用这个原则,我这里只是大致阐述下概念)。为了遵循这条原则,对象就要通过使用合作对象来完成自己的使命。但是这些合作对象从哪儿来呢?通常,没有依赖注入,你就需要在你的组件中实例化这些合作对象。对象之间的高耦合度使得你的应用很难维护,也不便于独立地测试组件。依赖注入是一个非常粗略的概念。当你使用容器或框架专门用来把合作对象“注入”给需要他们的各个对象后(详细请参见更正式的定义),它最终就演变成一个强大的模式。你可以独立开发和测试你的对象,然后把他们捆绑在一起来构建你的应用。在Java开发中,Spring框架就是个常见的依赖注入框架。

我将使用Spring框架的一部分,Spring-MVC为例。在Spring-MVC模式中,你有一个Controller对象用来处理来自客户端的访问请求。现今很多web应用,大多是后面有个数据库,应用就通过它提供的数据呈现给用户。假设用户根据作者查询书籍。最简单的方式是,Controller对象接收请求,把作者名字从request参数中挑出,再把条件传给BookService对象,等待返回的书名列表。最后把书名列表反馈给用户。Spring框架在中间所做的处理就是把BookService对象注入到Controller中(通过XML或注释进行配置,超出本文话题)。BookService对象对Java接口的实现意味着service的实现对Controller对象是不可见的。这样很好。只要参数和方法的返回类型不变,Controller对象就不需要了解service是如何工作的。但在Flex开发中需要怎么做?

在ActionScript 3.0接口中实现依赖注入

构造接口给依赖注入提供了活力。用一捆相互依靠才能工作的对象,而不是用某个特定的对象来实现,这就意味着,如果其中一个对象修改了,那么其它所有依赖它的对象都需要进行修改,但这些对象只需要改变相应接口的实现即可。所以实现的修改就变得无缝,测试也很方便。设想一些:既然ActionScript 3.0可以构造同样的接口,那么书写低耦合的代码就很方便。

和在Java里使用接口的方式一样:

1. 定义你的接口。ActionScript 3.0的接口类似:

package com.example {
    public interface Controller {
        public void search(searchParams:Object, callback:Function=null);
   }
} 

2.定义一个实现了该接口的类。

package com.example { 
    public class HttpController implements Controller{
        private var _httpService:HTTPService= new HTTPService();

        public void search(reqParams:Object, callback:Function=null){
            details omitted for clarity
       }
   }
} 

在上面的例子里,有一个名为Controller接口和名为HttpController的实现。当执行search的时候,HttpController用来和你应用的后端交互。它使用Flex对象HTTPService,处理search请求和返回的内容。你可以看到HttpController里实例化了HTTPService。所以为什么不能注入HTTPService对象呢?无缝接口可以随时满足你应用的需求。这种情况下,如果你需要另一个查找机制,就可以写一个简单的实例或修改已有的。

 

FLEX风格的依赖注入

你已经了解了依赖注入和它对一个好的应用设计的重要性。但如何运用在Flex应用里呢?举个例子,比如你创建了一个组件来接收和处理用户输入信息和查询结果的呈现。这个组件肯定是某种容器。所以要扩展Panel类,实现控制不同的对象来完成你的查询功能。另外,组件的行为完全用ActionScript类定义(在MXML里定义<script></script>标签)。扩展Panel对象的ActionScript文件大致如下例:

public class SearchPanel extends Panel {
    private _searchController:Controller;
    public function search(text:String):void {
        this._searchController.search(text, this.callBackFunction);
    }
    public function set searchController(searchController:Controller):void {
        this._searchController = searchController;
    }
    public function get searchController():Conroller {
        return this._searchController;
    }
}

上述例子的一大特点是实例变量,Controller类型的_searchController和其getter和setter方法。名字和_searchController变量去掉“_”的一样。接着,给用来做呈现的MXML组件起名为SearchPanelView.mxml(接着的细节省略...)

<?xml version="1.0" encoding="utf-8"?>
<SearchPanel xmlns="bbejeck.example.*" xmlns:comp="bbejeck.example.*"xmlns:mx="http://www.adobe.com/2006/mxml">
    <comp:HttpController id="searchController" />
</SearchPanel>

对于上面的MXML,有如下几个要点:

  1. <comp:HttpController id="searchController" />定义了为SearchPanel所用的controller组件。注意其中定义的类名为HttpController,_searchController实例变量仅为了让它是Controller类型,实现了什么无关紧要。
  2. id属性要同SearchPanel这个ActionScript类里的getter和setter方法名一致。
  3. 当Flex应用加载完SearchPanelView.mxml后,“HttpController”就被实例化了,id属性与SearchPanel类里setter方法名匹配的组件Controller实例就被注入到SearchPanel类里面了。
  4. 当你想要修改你的search功能,你可以修改HttpController对象,或定义一个新的实现类并修改SearchPanelView.mxml文件,无论哪种方法你都完全不需要修改SearchPanel的代码。

 

总结

你已经知道如何在Flex里使用依赖注入了。Flex应用会把MXML里的id和周围setter里方法名匹配的注入到组件中。我们有必要使用Flex获取基本的依赖注入容器。

我们可以得出结论:

  • 当构建应用的时候,不能只考虑构建应用自身,还需要考虑建立应用时需要哪些独立组件,他们的功能是什么。为了构建应用,你准备的组件还需要实现callback和service对象。代码重用很重要,以后你再建立新应用时就快很多了。
  • 简化单元测试。现在,如果你的组件拥有基于接口的合作者,那在测试这些组件时,你就可以手工地请求适当的setter方法并把仅实现接口的假对象作为测试用例。
分享到:
评论

相关推荐

    arcgis server flex 中的依赖注入

    ### 依赖注入在ArcGIS Server Flex中的应用 #### 一、理解依赖注入的概念与价值 依赖注入(Dependency Injection,简称DI)是一种设计模式,旨在减少类间的耦合度,提高软件系统的灵活性和可测试性。在传统的编程...

    ParsleyTest Flex框架parsley的使用入门

    Parsley是ActionScript 3.0的一个强大依赖注入(DI)和控制反转(IoC)框架,它为Flex和Adobe AIR应用程序提供了灵活的架构支持。这个名为"ParsleyTest"的压缩包文件包含了关于如何开始使用Parsley框架的源码示例,...

    Spring 整合 Flex 包

    Spring Flex 提供了全面的支持,使得 Flex 应用程序能够充分利用 Spring 框架的强大功能,包括依赖注入、服务代理、事务管理以及安全控制等。 Flex 是一个用于构建动态、交互性丰富的 Web 应用程序的开源框架,基于...

    Flex 4 高级编程 Flex 4 高级编程

    5. **数据绑定和依赖注入**:Flex 4 提供了强大的数据绑定功能,简化了模型与视图之间的数据同步。同时,通过依赖注入框架,如 Cairngorm 或 Mate,可以实现模块化的代码组织,提高代码的可维护性。 6. **事件处理*...

    FLEX MATE框架源代码

    FLEX MATE框架作为一款强大的工具,为Flex开发者提供了灵活、高效的组件管理和依赖注入解决方案。本文将深入探讨FLEX MATE框架的核心概念、设计模式以及源代码中的关键部分,旨在帮助读者更深入地理解和运用这个框架...

    Flex4.6+web

    然而,为了更好地利用这个项目,开发者需要熟悉Flex编程、MXML和ActionScript,理解Hibernate的对象关系映射概念,以及Spring的依赖注入和AOP机制。同时,掌握Java Web开发的基本知识,包括Servlet和JSP,也是非常...

    flex+spring 工程

    4. **库文件**:描述中提到的"必备的lib"可能包含Flex SDK的库,Spring BlazeDS库(用于Flex和Spring之间的通信),以及其他第三方库,如 Parsley 或 Mate(用于依赖注入和事件驱动架构在Flex中的实现)。...

    flex整合spring的例子

    这个例子旨在展示如何在Flex前端与Spring后端之间建立通信,以便利用Spring框架的强大功能,如依赖注入、事务管理等。 首先,Flex是一个基于ActionScript和Flash Player的开源框架,用于创建交互式的、基于Web的富...

    Flex4 spring整合实例

    Flex4和Spring是两个在开发领域中非常重要的技术框架,它们分别用于构建富互联网应用程序(RIA)和企业级Java应用的依赖注入与控制反转。在本整合实例中,我们将探讨如何将Adobe Flex4与Spring框架无缝集成,以实现...

    Flex Mate框架swc包及Mate用法

    总的来说,Flex Mate框架通过提供强大的依赖注入和事件驱动架构,极大地提升了Flex应用的开发效率和质量。熟悉并掌握Mate的使用,对于任何Flex开发者来说,都将是一个宝贵的技能,能够帮助他们构建更高效、更可维护...

    FlexDemo.rar

    3. **Spring**:Spring是一个广泛使用的Java企业级应用开发框架,提供了依赖注入(DI)和面向切面编程(AOP)等核心特性,简化了Java应用的开发和维护。在FlexDemo中,Spring可能用于管理后端服务,如业务逻辑和数据...

    Flex-Spring-JAVA-BLAZEDS.rar_Flex spring_flex_flex java

    Spring则是一个广泛使用的Java企业级应用开发框架,提供了依赖注入、面向切面编程等功能,是后端服务的核心。BlazeDS是Adobe提供的一个服务器端数据推送技术,它允许Flex应用与Java应用服务器进行实时通信。 描述中...

    FlexSpring jar包

    而Spring框架则是Java平台上的一款轻量级、全面的企业级应用开发框架,主要用于简化Java EE开发,提供依赖注入、AOP(面向切面编程)以及众多其他功能。 FlexSpring的集成允许开发者充分利用Flex的可视化设计和强大...

    Flex Spring JAVA BLAZEDS整合

    在默认情况下,BlazeDS会为每个远程对象请求创建一个服务器端Java对象的实例,但这与Spring的依赖注入不兼容,因为Spring的bean是由其容器创建和管理的。因此,整合Spring和BlazeDS使得Flex可以直接使用由Spring管理...

    Flex Cairngorm Parsley Demo 源码

    Parsley是Spring ActionScript项目的一部分,是一个更强大的依赖注入(DI)和面向切面编程(AOP)框架。它简化了组件间的通信,通过自动注入依赖关系,使得代码更加简洁和易于测试。Parsley还提供了拦截器、事件调度...

    Flex技术入门之如何创建flex的web工程

    (4) **框架支持**:Cairngorm和Pure MVC等Flex开发框架提高了开发效率和代码复用性,Spring ActionScript框架更是为Java程序员提供了类似Spring的开发体验,如依赖注入功能。 (5) **成熟的技术生态**:自Flex 1.0...

    Flex 与 Spring整合

    Spring框架以其灵活的依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)能力,简化了服务端的开发工作。Flex则通过HTTP、AMF(Action Message Format)等协议与Spring服务...

    parsley loc框架 flash flex 通用

    标题中的“Parsley LOC框架”指的是Parsley框架,这是一个专门为Adobe Flex和ActionScript开发者设计的开源依赖注入(Dependency Injection)和应用架构框架。它增强了Flex和Flash应用程序的可维护性和可扩展性,...

Global site tag (gtag.js) - Google Analytics