读书人

Cairngorm 之 1、运行机制

发布时间: 2012-11-07 09:56:10 作者: rapoo

Cairngorm 之 一、运行机制

?一、Cairngorm运行机制

1.1 Cairngorm的大体工作流程

客户端界面是View组成的,View使用Flex的bingding绑定来显示ModelLocator中包含的数据。View根据诸如鼠标点击之类的用户动作产生Event。这些Event被FrontController“广播”并“监听”。FrontController会将Event映射到一个Command类。主要的业务逻辑在这个Command中处理,Command创建所需的委托Delegate,委托进行与后台交互数据以及得到数据,然后更新存储在ModelLocator中的数据。由于View是绑定到ModelLocator中的数据上的,所以View就自动更新了。

使用Cairngorm框架后,可以使基于后台调用的开发,条例清晰,增删功能简单。

?

?

?

?

?Cairngorm 之 1、运行机制

?

1.2 一个功能涉及到的类

1.2.1 自定义事件类此类

此类extends CairngormEvent;

?

1.2.2 事件处理Command类

此类implements com.adobe.cairngorm.commands.ICommand, mx.rpc.IResponder.IResponder。

实现的接口方法:

1:execute( event:CairngormEvent ):void,当此事件被激发的时候,就执行此方法,原因下面将说明。

2:result( info:Object ):void和fault( info:Object ):void

当使用mx.rpc.IResponder和RemotOjbect进行后台调用时,调用成功、失败的事件处理方法。

?

1.2.3 事件监听注册Control类

此类extends FrontController,调用父类的addCommand方法,进行注册事件监听。

其父类FrontController的addCommand方法如下, commands是一个Dictionary,当注册时间监听时保存信息,通过事件名称保存处理此事件的Command类名。

当事件触发时,调出相应的Command类:var commandToInitialise : Class = getCommand( event.type );

实例化此类: var commandToExecute : ICommand = new commandToInitialise();

调用监听方法:commandToExecute.execute( event );

由于所有的Command类都实现了ICommand接口,所以都会去执行自己的execute方法。

??

public function addCommand( commandName : String, commandRef : Class, useWeakReference : Boolean = true ) : void      {         if( commands[ commandName ] != null )            throw new CairngormError( CairngormMessageCodes.COMMAND_ALREADY_REGISTERED, commandName );                  commands[ commandName ] = commandRef;         CairngormEventDispatcher.getInstance().addEventListener( commandName, executeCommand, false, 0, useWeakReference );      }

?

?

?

1.2.4 数据存储类Model

???????????????????? 此类implements IModelLocator,并且使用“单一模式”防止数据二义性。

?

1.2.4 后台调用RemoteObject服务

需要使用Cairngorm提供的ServiceLocator,建立一个mxm文件基于ServiceLocator。在里面写RemoteObject服务;

?

1.2.5 后台调用代理 GeneralServices

首先通过ServiceLocator得到注册好的RemoteObject:this.service = ServiceLocator.getInstance().getRemoteObject("remoteObject名称");

然后开始写调用的方法,用AsyncToken进行调用后的监听,通过addResponder方法指定处理类。

var call:AsyncToken = service.Logon(user.userName, user.password);

??????????????? call.addResponder(处理结果类);

处理结构的类,必须implements mx.rpc.IResponder.IResponder接口,实现result和fault方法,一般为Command类。

?

?

1.3 一个功能的工作流程

① 首先将“事件监听注册Control类”和“后台调用RemoteObject服务”,通过mxm标签形式初始化。

② 用户通过界面交互,出发一个事件(按钮事件等),在此事件处理中new出对应的功能事件,然后调用dispatch方法。

③ 犹豫已经功过FrontController类的addCommand方法注册了事件监听,所以当事件发生时,会马上执行对应的Command类中的execute方法;

④ 在Command的execute方法中new出对应后台代理类,并调用对应功能方法;

⑤ 当后台结果返回时,根据成功失败,调用result 或 fault方法;

⑥ 得到的数据后,更新相应的modul 上的数据,界面上显示的数据级联更新。

?

?

读书人网 >网络基础

热点推荐