一、Cairngorm运行机制
1.1 Cairngorm的大体工作流程
客户端界面是View组成的,View使用Flex的bingding绑定来显示ModelLocator中包含的数据。View根据诸如鼠标点击之类的用户动作产生Event。这些Event被FrontController“广播”并“监听”。FrontController会将Event映射到一个Command类。主要的业务逻辑在这个Command中处理,Command创建所需的委托Delegate,委托进行与后台交互数据以及得到数据,然后更新存储在ModelLocator中的数据。由于View是绑定到ModelLocator中的数据上的,所以View就自动更新了。
使用Cairngorm框架后,可以使基于后台调用的开发,条例清晰,增删功能简单。
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 上的数据,界面上显示的数据级联更新。