`
longgangbai
  • 浏览: 7251240 次
  • 性别: 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 中的依赖注入

    • ActionScript 3.0中的接口结构和它是怎样与Java中接口功能上相关的。 • 在ActionScript 3.0中怎样使用接口来实现依赖注入。 • 怎样在Flex中使用一个依赖注入的简单形式。

    flex 最佳实践教程

    它提供了依赖注入、对象生命周期的管理和消息的支持. 它与其它框架最主要的不同是框架的作用域: 它像其它小型的 IOC 框架一样为简单程序提供了易用性,而且也为大型、复杂和模块化的程序提供了许多特性,如:支持 ...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public ...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class ...

    Flex IOC 框架概览

    控制反转(inversion of Control,IOC),也称为依赖注入(Dependency injection,DI),在过去几年中已经成为流行的软件设计模式,从而导致许多Flex开发者投入到此类框架的探索,其中就包括Spring ActionScript,Parsley...

    Angular-php-sf-flex-webpack-encore-vuejs.zip

    Angular-php-sf-flex-webpack-encore-vuejs.zip,一个简单的应用程序框架,试图使每个组件协同工作:...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

    Angular-flex-layout.zip

    Angular-flex-layout.zip,为角度应用程序提供html ui布局;使用flexbox和响应式apiangular flex布局,...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

    flex parsley IOC框架笔记

    flex actionscript 开发 对flex mxml技术的掌握 对java数据库后台框架 spring+hibernate ejb 3.0+jpa 等等后台技术

    ArcGIS_FlexView指南(中文)

    26 5.2 依赖注入(DI,也叫控制反转)...................................................................................... 29 5.3 国际化 ....................................................................

    robotlegs-framework:适用于Flash和Flex的ActionScript 3应用程序框架

    它提供: 依赖注入模块管理指令管理查看管理即插即用扩展下载文档和支持框架文档在存储库中以README文件的形式存在。 最好的阅读方式是通过GitHub:使用IntelliJ IDEA轻松开发Robotlegs 2(新增功能) 流利的API使...

    Angular-VSCode-Angular-TypeScript-Snippets.zip

    Angular-VSCode-Angular-TypeScript-Snippets.zip,Visual Studio代码类型脚本片段(typescript、HTML、...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。

    Parsley:欧芹示例

    我选择欧芹是因为它的依赖注入和控制性质的逆向。 这有助于以更好的方式实现表示模型架构。 ##Dependency Injection and Inverse of Control 所有依赖对象都将在 parsley 上下文中配置,并且可以在不创建新实例的...

    Flicc-开源

    Flicc是用于Flex的基于Mxml的依赖注入框架。 Flicc允许您使用常量定义对象及其依赖项,以提供更多的编译时检查,配置视图组件并快速编写特定于域的注入标签。

    Ember:基于Flash组件的游戏开发实体系统框架

    Ember利用依赖项注入来简化编码而不会影响速度。 灰烬启用: 基于组件的游戏架构 游戏系统中的自动注入 自由选择合适的方式实施游戏 全模块化 代码 其他资源 执照 特此免费授予获得该软件和相关文档文件(“软件...

    最新AngularJS开发宝典视频教程 后盾网AngularJS培训视频教程 后盾网.txt

    ├最新AngularJS开发宝典—第004讲 声明模块与控制器规范与依赖注入分析.mp4 ├最新AngularJS开发宝典—第005讲 $scope的基本使用方法.mp4 ├最新AngularJS开发宝典—第006讲 表达式与ng-bind及ng-cloak解决闪屏问题...

    Spring攻略(第二版 中文高清版).part2

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    Spring攻略(第二版 中文高清版).part1

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    asp.net知识库

    体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——性能和灵活性兼备的方法 泛型技巧系列:用泛型...

Global site tag (gtag.js) - Google Analytics