- 浏览: 7251240 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
了解依赖注入
众所周知,面向对象设计能很好得控制类的功能(对于开发人员,你需要灵活得使用这个原则,我这里只是大致阐述下概念)。为了遵循这条原则,对象就要通过使用合作对象来完成自己的使命。但是这些合作对象从哪儿来呢?通常,没有依赖注入,你就需要在你的组件中实例化这些合作对象。对象之间的高耦合度使得你的应用很难维护,也不便于独立地测试组件。依赖注入是一个非常粗略的概念。当你使用容器或框架专门用来把合作对象“注入”给需要他们的各个对象后(详细请参见更正式的定义),它最终就演变成一个强大的模式。你可以独立开发和测试你的对象,然后把他们捆绑在一起来构建你的应用。在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,有如下几个要点:
- <comp:HttpController id="searchController" />定义了为SearchPanel所用的controller组件。注意其中定义的类名为HttpController,_searchController实例变量仅为了让它是Controller类型,实现了什么无关紧要。
- id属性要同SearchPanel这个ActionScript类里的getter和setter方法名一致。
- 当Flex应用加载完SearchPanelView.mxml后,“HttpController”就被实例化了,id属性与SearchPanel类里setter方法名匹配的组件Controller实例就被注入到SearchPanel类里面了。
- 当你想要修改你的search功能,你可以修改HttpController对象,或定义一个新的实现类并修改SearchPanelView.mxml文件,无论哪种方法你都完全不需要修改SearchPanel的代码。
总结
你已经知道如何在Flex里使用依赖注入了。Flex应用会把MXML里的id和周围setter里方法名匹配的注入到组件中。我们有必要使用Flex获取基本的依赖注入容器。
我们可以得出结论:
- 当构建应用的时候,不能只考虑构建应用自身,还需要考虑建立应用时需要哪些独立组件,他们的功能是什么。为了构建应用,你准备的组件还需要实现callback和service对象。代码重用很重要,以后你再建立新应用时就快很多了。
- 简化单元测试。现在,如果你的组件拥有基于接口的合作者,那在测试这些组件时,你就可以手工地请求适当的setter方法并把仅实现接口的假对象作为测试用例。
发表评论
-
flex 中As3Commons的使用學習
2009-10-15 12:53 3669學習Java的人,知道java中反射的强大, ... -
flex的国家化的应用
2009-09-23 08:59 2053在项目中需要使用发送短信模板的功能的,根据主题不同,模板不同, ... -
flex的沙箱问题
2009-09-14 17:14 5407在flex与google的地图整合中发现,点击了goog ... -
Flex 常用技巧
2009-09-04 13:00 2527flex是一种异步请求的技术,如果要实现同步必须在传递函 ... -
Flex 開發Google地圖
2009-08-24 13:16 24031 .获取googe的key 2.下载google的fle ... -
查询之order by,group by和having的使用
2009-08-08 15:48 4670在项目中查询常驻酒店的中住的次数最多的前10个酒店: 代码如 ... -
objectProxy的监控对象应用
2009-08-08 13:46 2632在项目中查询根据一个字段发生实现需要特殊的功能,作出相应的动作 ... -
Flex 与外部的数据通信(HTTPService,URLLoader和URLRequest)
2009-08-08 13:36 7367ActionScript 3.0中提供的数据加载请求类主要是H ... -
flex 数据绑定
2009-08-08 13:31 23729.2.1 函数和类级别的绑定 [Bindable]标签打使 ... -
Flex中Entity对象与Display对象之间的数据双向动态绑定
2009-08-08 13:27 2394flex项目中对象的和组 ... -
学习ActionScript 3.0的新特点
2009-08-06 13:05 1948ActionScript3.0 是一种类型 ... -
理解 Flex itemRenderer - 第 1 部分: 内联渲染器
2009-08-05 16:37 3097Flex 提供许多控制, 它们可以按不同方式显示大量数据。Li ... -
flex 中类似Google的提示下拉菜单实现
2009-08-01 16:28 5373项目中使用类似Gooogle输入提示菜单的实现如下 ... -
针对Flex中组件的扩展的应用开发
2009-08-01 16:04 2820在项目中使用一个自定义的CheckboxGroup组件继承自C ... -
Flex类似Google搜索提示的两种做法思路
2009-08-01 15:52 2636做了个简单的搜索提示 ... -
Flex中直接获取某个组件的对象
2009-08-01 15:47 2407Flex中直接获取某个组件的对象方案1: 遍历这些butto ... -
flex 查看类的各种数据的权限
2009-08-01 15:18 1819查看类的一些属性的信息:可读,可写,可读可写。 ... -
flex中getDefinitionByName 函数的使用
2009-08-01 12:40 6669在项目中自定义一个CheckboxGroup,这个控件里面 ... -
Flex 学习中数据类型必须注意的几点
2009-08-01 12:36 2176在字符串转换为int类型必须使用 最好如下: var a:i ... -
flex BindUtils的扩展的样式表绑定工具类StyleBindingUtils
2009-07-30 13:06 2167项目中使用的样式表绑定类如下: package uti ...
相关推荐
• ActionScript 3.0中的接口结构和它是怎样与Java中接口功能上相关的。 • 在ActionScript 3.0中怎样使用接口来实现依赖注入。 • 怎样在Flex中使用一个依赖注入的简单形式。
它提供了依赖注入、对象生命周期的管理和消息的支持. 它与其它框架最主要的不同是框架的作用域: 它像其它小型的 IOC 框架一样为简单程序提供了易用性,而且也为大型、复杂和模块化的程序提供了许多特性,如:支持 ...
现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public ...
现在,Java EE 后端与 Flex 前端的接口已经定义好了,要完成 Java EE 后端的接口实现类非常容易,利用 Spring 强大的依赖注入功能,可以通过几行简单的代码完成: 清单 2. FlexServiceImpl class public class ...
控制反转(inversion of Control,IOC),也称为依赖注入(Dependency injection,DI),在过去几年中已经成为流行的软件设计模式,从而导致许多Flex开发者投入到此类框架的探索,其中就包括Spring ActionScript,Parsley...
Angular-php-sf-flex-webpack-encore-vuejs.zip,一个简单的应用程序框架,试图使每个组件协同工作:...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。
Angular-flex-layout.zip,为角度应用程序提供html ui布局;使用flexbox和响应式apiangular flex布局,...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。
flex actionscript 开发 对flex mxml技术的掌握 对java数据库后台框架 spring+hibernate ejb 3.0+jpa 等等后台技术
26 5.2 依赖注入(DI,也叫控制反转)...................................................................................... 29 5.3 国际化 ....................................................................
它提供: 依赖注入模块管理指令管理查看管理即插即用扩展下载文档和支持框架文档在存储库中以README文件的形式存在。 最好的阅读方式是通过GitHub:使用IntelliJ IDEA轻松开发Robotlegs 2(新增功能) 流利的API使...
Angular-VSCode-Angular-TypeScript-Snippets.zip,Visual Studio代码类型脚本片段(typescript、HTML、...它专注于良好的移动开发、模块化和改进的依赖注入。angular的设计目的是全面解决开发人员的web应用程序工作流。
我选择欧芹是因为它的依赖注入和控制性质的逆向。 这有助于以更好的方式实现表示模型架构。 ##Dependency Injection and Inverse of Control 所有依赖对象都将在 parsley 上下文中配置,并且可以在不创建新实例的...
Flicc是用于Flex的基于Mxml的依赖注入框架。 Flicc允许您使用常量定义对象及其依赖项,以提供更多的编译时检查,配置视图组件并快速编写特定于域的注入标签。
Ember利用依赖项注入来简化编码而不会影响速度。 灰烬启用: 基于组件的游戏架构 游戏系统中的自动注入 自由选择合适的方式实施游戏 全模块化 代码 其他资源 执照 特此免费授予获得该软件和相关文档文件(“软件...
├最新AngularJS开发宝典—第004讲 声明模块与控制器规范与依赖注入分析.mp4 ├最新AngularJS开发宝典—第005讲 $scope的基本使用方法.mp4 ├最新AngularJS开发宝典—第006讲 表达式与ng-bind及ng-cloak解决闪屏问题...
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 ...
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 ...
体验.net2.0的优雅(四):Provider、策略、控制反转和依赖注入 泛型最佳实践 asp.net 2.0下嵌套masterpage页的可视化编辑 C# 2.0与泛型 动态调用对象的属性和方法——性能和灵活性兼备的方法 泛型技巧系列:用泛型...