【VC++开源代码栏目提醒】:网学会员为需要VC++开源代码的朋友们搜集整理了Cairngorm框架在Flex开发中的应用研究 - 会议论文相关资料,希望对各位网友有所帮助!
中 文摘要 摘要 为了能处理更复杂的多媒体应用,改善用户的交互体验,出现了一种新型的Intemet应用程序,即丰富互联网应用程序(RIA:Rich Intemet Application)。
在众多RIA开发技术中,Adobe Flex凭借其完善、强大的功能受到广泛应用。
Flex是专注于表现层开发的一系列技术及产品的解决方案。
尽管Flex使用Web程序员熟悉的工作流和编程模型来提高开发效率,但在大型复杂项目的开发中也存在开发低效与可维护性差等问题。
为此,著名的
软件厂商Adobe公司推荐使用Caimgorm开发框架辅助Flex开发。
Caimgorm是由Adobe公司支持并推荐的基于Mvc模式的
开源框架。
该框架提供了一套Flex应用程序开发骨架而并非服务来提高Flex程序的扩展性和可维护性。
但Caimgorm框架存在结构复杂不易理解、对程序侵入性高不易于移植等不足。
为了改善该框架中存在的问题,本文在对Caimgorm框架详细分析与研究的基础上,主要做了如下几个方面的
工作: ◆重点分析TCaimgorm框架的特点及技术背景,包括观察者设计模式、事 件流机制和数据绑定技术等。
同时也分析了该框架各层的实现原理和影响 开发效率的因素。
◆针对Cairngorm框架存在的不足,对Caimgorm框架中的控制层、命令类 (Command)和值对象(ValueObjeet)进行了改进。
以提高控制层的控制处理 能力、增加多动作处理方式与反射机制,并在数据对象中添加了数据验证 功能,从而使改进后的框架具有轻量级、低侵入和易于使用的特点。
◆将改进后的框架应用于FStop
开源项目中,并对程序的移植性、框架的开 发效率进行了测试。
测试结果表明,改进后的框架在开发流程、处理模式、 耦合性能及可移植性等方面与Caimgorm相比具有了一定的改善和提高。
关键词: Ca i rngorm框架;Flex;RIA;设计模式;开发框架 英文摘要 Abst ract In order to process a more complex multimedia application and improve users’interactive experience,a new Intemet application called RIA(Rich Interact Application)has come.In the numerous RIA devdopment technologies,Adobe Flex which iscapable is widespread.Although applying itself to Web developer by familiar workflow and programming models for efficiency,Flex still has low efficiency issues incomplex system development or low maintenance…To solve these issues,Adoberecommends using Caimgorm development framework to focus developers’attentionon development ofbusiness logic but code. Caimgorm is an open micro—architecture MVC framework.It provides a series ofskeletons but services to improve extension and maintenance of program.But no one isperfect.Cairngorm also has disadvantages as complex structure and high invasion.Inorder to overcome these disadvantages in framework,the thesis presents an improvedframework.111e keys are as follows: ◆ It forms analysis of the technical background of the Caimgorm framework:the observer design pattern,event flow mechanism and data binding technology. At the salne time,it researches Caimgorm code to find the crux. 夺Contrary to the fault of Caimgorm,it puts forward丽m control layer, Command and value object.Enforced controller capability;multi·action dealing reflection mechanism and value object validate features.Therefore it implements light,low invasion and easy use for the framework. 夺It uses the improved framework in a web application of FStop,and conducts a comparative test in the portability and development efficiency.The result indicates that the optimized framework,compared wim Caimgorm,has certain improvement and enhancement on event control mechanism,processing pattern,low-invasion and portability contrasted to Caimgorm.Key Words:Cairngorm;Flex;RIA;Design Pattern;Framework 大连海事大学学位
论文原创性声明和使用授权说明
原创性声明 本人郑重声明:本
论文是在导师的指导下,独立进行研究工作所取得的成果,撰写成博/硕士学位
论文 竺£麴gQ墅框塞在E!丛珏蕉主的廑眉硒窥::。
除
论文中已经注明引用的内容外,对
论文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本
论文中不包含任何未加明确注明的其他个人或集体已经公开发表或未公开发表的成果。
本声明的法律责任由本人承担。
学位
论文作者签名:王杰銎盔、 学位
论文版权使用授权书 本学位
论文作者及指导教师完全了解大连海事大学有关保留、使用研究生学位
论文的规定,即:大连海事大学有权保留并向国家有关部门或机构送交学位
论文的复印件和电子版,允许
论文被查阅和借阅。
本人授权大连海事大学可以将本学位
论文的全部或部分内容编入有关数据库进行检索,也可采用影印、缩印或扫描等复制手段保存和汇编学位
论文。
同意将本学位
论文收录到《中国优秀博硕士学位
论文全文数据库》(中国学术期刊(光盘版)电子杂志社)、《中国学位
论文全文数据库》(中国科学技术信息研究所)等数据库中,并以电子出版物形式出版发行和提供信息服务。
保密的
论文在解密后遵守此规定。
…糍:至诋…名:乞f叩 、_,、’’I,vq’、-, 1 日期:弋夕D 1年‖月啄日。
Caimgorm框架在Flex开发中的应用研究 第1章绪论1.1
论文的研究背景 随着Web2.0的兴起,Web开发技术的发展也是一日千里。
最初的网站只能使用HTML来编写,只能进行简单的图文信息传播,与客户端缺乏互动性。
为了解决这些问题,Microsoft、SUN等公司相继推出了ASP、PHP、JSP等开发技术,大大地提高了网站开发效率和质量。
但传统的Web应用程序的表现形式是完全基于HTML页面之上的,由于HTML在早期完全被设计用于文本呈现,面对现在多媒体环境、即时性响应的网络表现,以渐渐显示出效率低下的、浏览器限制难以绘制丰富强大的图形界面等问题【1‘2】。
这就是被Macromedia公司称之为“体验问题”。
2003年3月,Macromedia公司提出一种被称为富互联网应用RIA(Rich Int睨’netApplication)的、具有高度互动性和丰富用户体验的
网络应用程序概念。
在RIA出现之前,Web开发人员一直希望构建一种超越传统HTML的网络客户端,这样的客户端LI’,HTML客户端更加健壮、反应更加灵敏和更具有令人感兴趣的可视化特性。
RIA的出现无疑打破了传统基于浏览器网页的架构。
相比于当前主流的J2EE、.NET的web开发领域,RIA结合了桌面应用程序的反应快、交互性强的优点与Web应用程序的传播范围广及容易传播的特性。
这种程序具有互动用户界面;在无刷新页面之下提供快捷的界面响应时间;提供通用的用户界面特性以及离线操作能力;立即部署、跨平台、采用逐步下载检索内容和数据以及可以充分利用被广泛采纳的互联网标准;提供拖动.释放能力等特点。
目前常见的RIA具体技术体现是Java Applet、Ajax、Silverlight、Flex等。
无论将来RIA是否能够完全代替HTML应用系统,对于那些采用C/S架构的胖客户端技术运行的复杂应用系统和采用基于B/S架构的瘦客户端技术部署的Web应用系统来说,RIA确实提供了一种高效合理的选择。
从目前RIA的普及情况来看,离“RIA时代”还有很远的一段距离。
当前以及在未来的一段时间内,传统的Web应用程序和RIA应该将会一直共存。
1.2 F l eX与Ca i rngorm框架的研究现状 第1章绪论 目前实现R认的主流技术是Ajax和Flex。
Ajax(Asynchmnous Javascript and XML)技术基于JavaScript技术,是目前Web2.0技术浪潮的主要代表,被大量应用于J2EE与.NET开发中,然而JavaScript对不同的浏览器支持没有统一的标准,而且调试困难,这些极大地限制了Ajax的应用范围;Flex技术是基于Flash、运行于Adobe FlashPlaye环境。
应用Flex技术设计的RIA的表现力、交互性能达到桌面应用
系统水平,而且具有跨平台性的Flash PlayerP,被98%以上的桌面系统的浏览器安装作为前台的RIA,以满足用户更为直观和极具交互性的在线体验。
因此,Flex技术在表现力、交互性、跨平台性以及与应用服务器的
通信方面均超越了Ajax技术。
可以说Flex针对RIA的特点提出来卓越的解决方案【31。
采用Flex与J2EE等企业级服务应用整合开发的RIA将会比传统的web应用程序展现出更大优势。
但是Flex开发也存在着一般Web开发过程所具有的效率低、系统庞大繁杂和可维护性差等问题。
为了解决Flex开发所遇到的
问题,出现了很多提高Flex开发效率的框架,如PureMVC、ARP、Caimgorm等,其qbCaimgorm作为Adobe公司承认的官方框架使用最为广泛【4匍。
该框架遵循MVC设计思想,将Flex应用程序分为视图层、控制层和模型层。
其中,视图层负责展现用户界面;模型层关注业务逻辑和数据一致性;控制层根据不同应用将模型层业务逻辑与视图层映射,监听事件机制等。
Caimgorm框架特别提供给了三个组件类以方便程序员的开发与使用,它们分别是模型定位器(Model Locator)、服务定位器(Service Locator)与前台控制器。
模型定位器承载组件之间的数据传递,通过这个定位器程序员可以方便的绑定数据对象来供视图层实时显示;服务定位器提供多种前后台交互的服务,如HttpService、WebService等;前台控制器建立前台传递的事件流到命令类的映射。
因此相比于其它的Flex开发框架,Caimgorm提供了强大简洁的组件以保证在程序开发过程中效率上获得一定的提高,所以受到广大的Flex开发人员的欢迎。
但Caimgorm框架并非完美,该框架使用上比较繁琐,维护的类相对较多;控制层域仅限于前台,功能较弱;模型层对业务逻辑具有侵入性,不符合轻量级框架的理念等问题。
因此本文针对Caimgorm框架的不足,提出了结合XML解析方法和反射机制上来加强控制器与命令类的功能以及为数值对象加入切面类型检查能 Cairngorm框架在Flex开发中的应用研究力的改进方案,从而将Caimgorm框架改进为具有低侵入、低耦合、轻量级且易于程序员使用的开发框架。
1.3
论文的研究内容和组织结构1.3.1
论文的研究内容 本文分析了当前Web开发领域中FleX技术的优势及特点,并对使用Cairngorm框架辅助Flex程序开发所需要的技术背景进行了研究。
在对现有的Caimgorm框架优缺点进行深入分析的基础上,结合观察者
设计模式、XML解析技术和事件流响应原理,为Caimgorm框架提供改进的解析控制功能,增加多动作处理方式与反射机制,并为模型层中的值对象增加数据验证功能,从而使框架满足轻量级、低侵入和易于使用的要求。
本文将改进后的框架应用于FStop
开源项目中,通过对该项目的重构、测试和对比分析,证明改进后的框架在功能、设计模式、程序可移植性等方面具有了一定的改善和提高。
1.3.2
论文的组织结构第1章介绍了
论文课题的研究背景,研究现状,研究内容及组织结构;第2章简要介绍了本文所要用到的技术及关键概念,首先对Flex的事件机制进行 了介绍,随后介绍了数据绑定等特性,最后通过实例对Flex开发过程中表 现出的紧耦合问题进行了阐述。
第3章对Caimgorm框架组成部分、分层解耦开发模式等做了具体介绍,分析了该 框架下主要功能类的作用。
最后总结出Cairngorm框架在开发过程中体现 出的优势和不足,在此基础上做出了改进。
第4章 介绍了改进所使用的技术及策略模式。
在Cairngorm框架基础上,分别对 进控制层、模型层中的命令类和数据对象进行改进,使得改进后框架满足 轻量级、低侵入的要求。
第5章提出了如何将Caimgorm框架的开发项目迁移到改进后的开发项目中,并对 改进框架在实际的项目中做出程序可移植性和
代码量的测试。
第1章绪论第6章总结与展望。
对本文所研究的内容进行了总结,并对进一步需要研究的内 容作了展望。
一4一 Cairngorm框架在Flex开发中的应用研究 第2章Flex的技术背景 Flex使用了一套产生、广播、处理事件的机制。
在Flex开领域中所使用的MVC模式的开发框架就是基于这个机制来设计的,即被传递的信息都是以事件流的方式处理。
因此,Flex开发与传统Web开发的重要区别之一就是Flex所使用的开发框架属于事件驱动而非数据驱动。
本章在进一步探讨Caimgorm框架前,先研究Flex开发所需要的相关技术背景。
2.1 FIex开发涉及的技术背景2.1.1 FI ex简介 Adobe Flex是专注于RIA开发和部署一系列技术和产品的解决
方案,包括theFlex Framework,Flex Builder,Flex Enterprise Services等。
Flex技术是表现层解决方案,像所有其它类似技术一样,表现层技术要解决三个基本问题:表现层界面展示和人机交互、客户端数据操作、客户端同服务器端数据交互和整合。
Flex针对这三个根本问题提供了卓越的解决方案。
Flex开发环境基于eclipse的Flex Builder集成开发环境,这使得使用eclipse的传统Web开发者很快的熟悉开发环境,
学习速度更快。
Flex将基于标准的语言和各种可扩展用户界面及数据访问组件结合起来,使开发人员能够快速构建具有丰富数据演示、强大客户端逻辑和集成多媒体功能的应用程序。
使用Flex构建的应用程序能够在桌面平台上运行,支持对应用
程序外观进行完全自定义,并支持各种连接到后端数据和服务的方法。
在服务器支持方面Flex整合了LiveCycle DataServices,ColdFusion等功能强大的服务器产品。
Flex应用开发程序最终会被编译成swf类型的flash文件格式,该程序既可以被嵌入在HTML网页中呈现也可以在桌面中独立显示。
类似于Java的虚拟机环境,Flex程序的客户端也需要FlashPlayer容器来运行swf执行文件。
因为FlashPlayer容器在个人电脑领域的大量普及,使得Flex RIA拥有了与Java应用程序同样的多平台运行能力。
开发者可以使用MXML页面或AcitonScript3脚本语言来编写Flex页面及逻辑。
MXML页面在
代码风格上与XML文件相一致,但是MXML最终会 第2章Flex的技术背景被转换为ActionScirpt3脚本
代码,这就像之前的JSP脚本最终会转换为JavaServlet
代码一样。
凭借着灵活、强大的开发方式,个性丰富的多媒体应用程序,极强的用户的体验,Flex彻底革新之前Web应用的客户与服务器的交互模式,被越来越广泛的应用于企业级开发领域中【7.141。
2.1.2观察者模式 观察者模式定义了对象与对象之间的一对多的依赖关系,当模式中的一个对像改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者模式在生活中的具体事例表现为书报的发布/订阅行为模式:读者在邮局注册预定的书报和地址,当邮局有符合用户要求的刊物到达,就会及时发送给读者。
邮局在此相当于一个观察者,其作用是监听用户关注的书报,当书报抵达后观察者将其发送到读者。
读者不必亲自监听书报是否到达,这无疑减轻了读者订阅方面的业务负担,如图2.1所示。
Publishers Mail Server SubScribeI’S 图2.1观察者模式 Fig.2.1 Observer Pattern 在应用程序开发过程中,要求用户界面和业务逻辑分离,划定清晰的界限。
应用程序要求能快速的更改用户界面并且不能对应用程序其他部分产生连带影响,而且业务逻辑也会发生变化并要求这一切变化与用户界面无关。
观察者(observer)就是解决此问题最
常用的设计模式,它非常有助于在系统中各个对象之间划分清晰 的界限。
因此观察者模式在界面程序设计中应用广泛。
在Flex中的事件触发机制就是基于观察者模式来实现的。
比如button中的click 一6一 Caimgorm框架在Flex开发中的应用研究事件,注册监听器
代码如下: btn_login.addEventListener(”loginEvent”,LoginValidate); 此监听器相当于一个观察者。
这罩在观察者中注册了loginEvent事件,当此事件产生时,将事件交由回调函数LoginValidate来处理。
2.1.3 FIex的事件流机制 在Flex3中EventDispatcher类直接继承自Object顶层类,DisplayObject表示所有可显示的基类,它类继承自EventDispatcher。
在DisplayObject的众多子类中,开发使用最多的是InteractiveObject类。
如图2.2所示。
图2.2事件机制继承类 Fig.2.2 Event mechanism inherent classes 从图2.2可见,随着不断的继承,界面控件最终都会含有继承自EventDispatcher的dispatchEvent这个方法。
该方法有一个参数,即事件对象dispatchEvent,这个参数的作用是分发一个事件对象,分发是没有目的的,属于广播形式。
Flex的事 第2章Flex的技术背景件监听线程会捕获到各种各样的事件,捕获事件是从根节点到子节点,检测对象是否
注册了监听器,是则调用监听函数。
不同的事件可以通过标识来区分。
在发布阶段事件对象会被分发和捕获,事件流向分为目标阶段和冒泡阶段。
在目标阶段,调用目标对象本身注册的监听程序。
在冒泡阶段事件从目标节点流到根节点,并检测对象是否注册了监听器,是则调用监听函数。
所有的事件类都是继承自flash.events.Event类的,他包含一些比较重要的属性:name和bubbles。
Name是这个对象在被捕捉到时的标识。
Bubbles是个布尔值,决定了该对象是在目标阶段或是冒泡阶段被捕获。
2.1.4 FIex中的数据绑定 数据绑定技术是当数据源对象的数据发生变化时,目标对象的数据会自动更新,而不需要再编写
代码去强制更新。
数据绑定可分为界面显示绑定和后台数据库绑定。
数据绑定技术在传统开发领域大多是后台的数据持久技术,如Java环境的hibernation框架、.NET中的ADO控件等数据库持久化技术;目前最新流行的Web2.0技术可认为是客户端界面数据绑定,代表如Ajax RIA技术,Ajax的突出优点之一就是实现HTML页面的无刷新动态切换,这不仅减轻了服务器的负担加快了数据传输效率,而且给用户带来了更好的使用体验。
RIA技术的出现使得Web开发正走上既有B\S架构的可维护性和客户端无关性,又能达到C\S架构所能达到的本地化界面的交互性的道路【15捌】。
Flex技术在实现数据绑定上相比Ajax具备更大的优点。
首先Flex开发具有
开源独立的开发和运行环境,这使得Flex程序不存在兼容性问题,且易于调试和维护。
其次Flex已实现数据绑定的
代码封装到位,对比Ajax要编写的javascript
代码量大且Ajax框架极多等不足,使用Flex的数据绑定会减轻开发者的负担。
Flex的数据绑定实际也是借助事件机制来完成的,当目标使用了数据绑定的时候,目标对象就会监听数据源对象的某一固定事件。
当数据源发生变化时,数据源会派发改变事件(ChangeEvent),通知目标对象更新数据。
这个过程由Flex完成,不用程序员手动干预。
数据绑定的前提条件:源对象的数据和目标对象的数据格式相同。
实现数据绑定的方法: Caimgorm框架在Flex开发中的应用研究 1.在对象的属性标签中,使用“{)”把数据源直接绑定到对象的某个属性上。
2.在对象的属性标签中,使用“{)”把某个函数的返回值作为数据源绑定到对 象属性。
函数的参数要使用〔Bindable〕绑定符号 3.〔Bindable(event=“eventname”)】。
Event表示当数据源发生变化时,数据源所在对象派发的事件类型,它是可选项,默认的事件名是‘’propertyChange”,一般情况下只需要使用〔Bindable〕标签2.2事件流机制应用实例 基于Flex事件流机制的应用程序是由用户动作在界面层组件作产生事件并被监听器所捕获,该事件监听器需要开发者写入
代码并映射好相应的回调函数。
之后程序流程会进入自定义响应事件,再广播该事件。
这个事件同样会被监听器所接收并调用相应的回调函数去处理。
为了说明Flex的事件驱动编程模式,下边用事件流机处理制来
演示一个用户登录框验证实例,程序的事件流程结构设计如图2.3所示。
图2.3事件流图 Fig.2.3 Events Flew 从图2.3的事件流可以看出Flex内部组件不是以B/S架构程序那样基于HTTP协议发出请求,Eh J〕艮务器端通过一个标准接口读出参数并处理并做出响应。
而是 一9一 第2章Flex帕技术骨景将所有的用户交互请求以事件的方式发布,程序员需要在程序中使用事件监听器监听这些事件.因此这就需要Fit=程序开发者关注可能产生的用户界面交互事件类型、设置监听墨及自定义事件类.所以,只瓤开发是基于事件驱动模垂稿程筷式的,这种模式在开发中具有麓统一处理Flex客户端程序中备个组件闻有效传递的参投、协调组件l矗l的行为等好处.以用户登录验证的例子来说.在界面点击登录按钮后-台产生对应的登录事件对象,泼事件对象会被FI“的摹件监听器接收并处理.登录验证程初始序界面知匿2.4所示。
丑录表中 用户名 害B: 重置 IT H 幽暑4疆序舁叠 F畦2^h*缸● 谖程序的执行流程是首先在mxml页面中执行初始佬函敷ia认pp0,该蕾数中注册了监听函数b打Uog_m.酣dBv鼬础s把n靠(…)并监听bhLjogin组件发出的事件.点击登最后.会艘发bm_login的dick事件,调用oncllct Iogin两数.此函数中会初始化自定义事件IoginEvmt,之后调用组件的dispa心Event07Y法将自定义事件广播,可以发现FkxRlA程序传输的都是事件对象。
即以事件为驱动。
逸是FI强和|;置传输数据对象为驱动的传统Web程序的区别之一。
这里界面控件b恤Iosin阃q“:^刚谢∞c删effi’iniApp0”>接继承戡蜘m.姊-曲甘爨,所l;I它具备事件捕获、注珊及广播能力.该页面的代丹如下# <rmx:¥cfipt> 刮〔cDATA〔 Caimgorm框架在Flex开发中的应用研究 import nix.controls.Alert; import edu.dmu.*; internal function iniAppO:void { btn_login.addEventListener(”loginEvent”,new LoadXML(”edu /dmu/users.xml”).LoginValidate); ) internal function onClick_login(evt:MouseEvent):void { vat e:LoginEvent-=new LoginEvent(”loginEvent”); e.name=txt_ntime.text; e.password=txt_pwd.text; btn_login.dispatchEvent(e); ) </mx:Script> .