Flex Cairngorm框架应用探讨

时间:2022-08-23 05:41:54

Flex Cairngorm框架应用探讨

摘要:Cairngorm是一个轻量级、开源的框架,在当前RIA中大型应用项目开发中,它能有效提高开发效率和有利于团队分工协作。介绍了Cairngorm框架的构成、运行原理和程序设计方法,并举例说明。

关键词:RIA; Flex;Cairngorm

中图分类号:TP301文献标识码:A文章编号:16727800(2011)012001903

作者简介:戴剑伟(1966-),男,湖南涟源人,博士,国防信息学院副教授,研究方向为数据工程;谭爱泉(1981-),男,湖南涟源人,硕士,73133部队助理工程师,研究方向为信息系统;李贵华(1985-),男,四川泸州人,73141部队助理工程师,研究方向为信息系统。

0引言

Flex是目前最流行的RIA(Rich Internet Application,富互联网应用程序)开发技术之一,相比于传统网络应用,拥有更加卓越的交互能力和绚丽的表现效果。因此,Flex常被作为表现层的解决方案。在中大型RIA项目开发中,随着代码量增加、业务逻辑复杂化等管理的需要,一个好的框架不但能提高开发效率,也更有利于团队合作。Adobe公司提供的开源框架Cairngorm是Flex程序设计的有效工具。

1Cairngorm框架的工作原理

1.1Cairngorm框架简介

Cairngorm是一个由Adobe开发团队设计,针对Flex开发者的、开源的、轻量级框架,可应用于企业级的软件开发。Cairngorm基于事件驱动,将每个事件封装为一个类,有利于代码整洁和重用;另外,它是一种类似于MVC(ModelViewControl)的框架,将设计视图与代码分离,有利于团队开发。

其次,Cairngorm是一个设计模式的集合,包括Value Object/Data Transfer Object模式、Model Locator模式等。Value Object(VO,值对象)/Data Transfer Object(DTO,数据传输对象)是从J2EE核心模式中借用的,VO对象相当于JavaBean对象;Model Locator(模型定位器)可以存放应用的状态,相当于客户端的数据库。Cairngorm的主要特点有:①在客户端处理用户动作,用户动作包括点击按钮、拖放图标、双击行或是发送表单等;②封装业务逻辑同服务器交互;③在客户端管理状态并使用用户界面展示状态。

1.2Cairngorm框架的基础类

Cairngorm框架中大部分基础类不能直接使用,用户需要继承基础类来完成特定的功能。

(1)Responder类。Responder类是一个接口类,用以处理正常或异常结果。Responder类定义了两个抽象的方法:onResult方法和onFault方法。onResult方法用于操作正常时的处理,onFault方法用于操作异常时的处理。

(2)ServiceLocator类。ServiceLocator类用以查找服务,如、等。

(3)Command类。Command类继承于Icommand接口类,用于处理某一事件,其中定义了execute抽象方法,用于执行相应处理。

(4)CairngormEvent类。CairngormEvent类用于自定义用户事件,包含一个成员变量data和一个构造函数,data变量可存储任何类型的数据。

(5)CairngormEventDispatcher类。CairngormEventDispatcher类用于管理事件,类中的方法说明如表1所示。

表1CairngormEventDispatcher类的方法

方法名说明getInstance获取类的一个实例AddEventListener添加事件监听removeEventListener移除事件监听dispatchEvent广播事件hasEventListener是否有事件监听willTrigger是否可以触发(6)FrontController类。FrontController类用于监听事件,一旦事件发生,前台控制器找到事件的相应处理命令类执行。FrontController类中方法说明如表2所示。

(7)ModelLocator类。ModelLocator类是一种接口类,用于应用程序的数据模型,可将应用程序需要显示的数据及其状态变量都定义在ModelLocator类中。ModelLocator类相当于应用程序的“数据库”,方便修改和删除。

表2FrontController类的方法

方法名说明addCommand监听事件,并添加事件的处理命令executeCommand执行命令getCommand获得命令(8)ViewHelper类。ViewHelper类用于辅助操作视图,使用它可在AS文件中修改其他MXML文件中的视图,它定义了两个成员变量:view和id。View变量为Object类型,存储了使用ViewHelper类的MXML文件的全部组件视图。id变量为ViewHelper类的标识符。

(9)ViewLocator类。ViewLocator类用以查找视图,即查找ViewHelper类实例。

(10)ValueObject类。ValueObject类继承于IvalueObject类,而IvalueObject接口类主要用于定义数据模型,其好处是使应用程序更简洁、重用性更高。

1.3Cairngorm框架运行原理

Cairngorm框架的运行原理如图1所示。首先,客户端触发CairngormEvent事件,同时前台控制器(FrontController)监听事件,监听并接收到CairngormEvent事件后,然后寻找相应的Command类并调用其execute方法,询问是否访问远程数据。如果决定访问远程数据,委托类delegate查找相应的服务,由服务定位器(ServiceLocator)返回相应的服务给委托类调用。由于值对象(value object,VO)与服务器端JavaBean对象交互时,需要数据转换中间产品Blaze DS进行转换,Blaze DS完成数据转换并返回相应的数据集给模型定位器(ModelLocator),模型定位器与视图已实施数据绑定,视图数据得到更新。如果不访问远程数据,则返回相应的异常信息。

图1Cairngorm框架运行原理

2一个简单的例子

在利用Cairngorm框架开发一个新功能时,通常按照以下步骤进行:①注册一个事件(Event)和命令(Command),用前台控制器使用addcommand()方法;②实现一个命令(Command)、两个方法execute()方法和OnResult()方法,OnResult()方法获取从服务器端返回的结果;获取的结果用于更新模型定位器(Model Locator),同时模型定位器自动更新视图;③开发一个新服务(Service)时,利用业务(Delegate)来调用命令(Command);④如果已有服务还需调用其他服务,把其他服务也加入服务定位器(Service Locator)中;⑤创建一个Value Objects(值对象)在命令与业务间、业务与服务器间传输,或存储到模型定位器(Model Locator)中;Value Objects可以最先定义,可以在应用程序中不断重用。

如果利用Cairngorm框架快速开发一个新功能时,也可以只实现以下两步:① 注册一个事件和命令,用前台控制器使用addcommand()方法;② 实现一个新的命令。

另外,调试Cairngorm应用程序,一般遵循以下几步:①检查事件是否在前台控制器注册过;②检查命令中的execute()方法是否被控制器调用;③检查相应的方法是否被调用;④ 检查命令中的OnResult()方法是否被调用;⑤检查模型定位器中的模型是否更新。

下面以一个学生信息查询模块来说明整个开发过程:

(1)定义一个Value Object对象Person.as类。主要代码如下:

public class Person{

private var per_id:int;

private var per_name:Sring;

private var per_gender:String;

……//getter,setter方法

}

(2)注册一个查询学生信息事件FindStudentInfoEvent.as类。主要代码如下:

//必须继承CairngormEvent事件

public class FindStudentInfoEvent extends CairngormEvent{

public static var EVENT_FINDSTUDENT_EVENT:String = "FindStudentInfoEvent";

public var _data:Object; //用于接收传入的VO对象,如Person对象。

public function FindStudentInfoEvent(data:Object,bubbles:Boolean=true,cancelable:Boolean=false){

super(EVENT_FINDSTUDENT_EVENT);

this._data = data;

}

}

(3)定义一个命令对象FindStudentInfoCommand.as类。主要代码如下:

public class FindStudentInfoCommand implements Icommand, Iresponder{

private var gm:GobalModel = GlobalModel.getInstance(); //模型定位器

public function FindStudentInfoCommand() { //构造函数 }

public function execute(event:CairngormEvent):void{

var delegate:StudentDelegate = new StudentDelegate(this); //业务类

delegate.findStudent();

}

override public function onResult(data:Object):void{

…… //接收从服务器端返回的结果

}

}

(4)定义一个业务类StudentDelegate.as类,主要代码如下:

public class StudentDelegate{

private var responder:Iresponder; //父类接口

private var studentService:Object;//与服务器端对应的服务对象

[Bindable] var gm:GlobalModel = GlobalModel.getInstance();//模型定位器

public function StudentDelegate(response:Iresponder){ //构造函数

this.responder = responder;

studentService = ServiceLocator.getInstance().getRemoteObject("studentServices");

}

public function findStudent():void{ //采用异步方式从服务器端调用findStudent()

var call:AsyncToken = studentService.findStudent(gm.studentPageRequest);

call.addResponder(this.responder);

}

……//其他业务方法,如添加、修改、删除等。

}

3结束语

在RIA中大型应用程序开发中,Cairngorm框架不但让我们的代码层次清晰,轻松迅速地建立和维护应用程序,提高了开发效率;还有利于团队合作,协助更加紧密。另外,Cairngorm是Adobe公司推出,功能还在不断扩展,至今已经推出了Cairngorm 3版本,它按应用呈分层结构,可整合spring,Hibernate,EJB等进行企业级开发,随着RIA技术的发展,Cairngorm会逐渐完善和强大。参考文献:

[1]黄曦.Flex3.0 RIA开发详解:基于ActionScript3.0实现[M].北京:电子工业出版社,2008.

[2]JEREMY WISCHUSEN.Professional Cairngorm[M].Indiana.Wiley Publishing,Inc,2010.

Research on Flex Cairngorm Architecture

Abstract:As a lightweight and open source architecture, Cairngorm can improve the efficiency of development and collaboration of workgroup. This paper introduces the structure, principle of operation and the programming method of the Cairngorm architecture, and an example is given.

Key Words: RIA;Flex;Cairngorm

上一篇:语言学习系统 下一篇:磁盘阵列技术应用实践