flex的Cairngorm框架

flex的Cairngorm框架

由于要写flex的项目,接触了一段时间的Cairngorm框架,初步认识它是flex的一个mvc结构的框架实现了页面,调用相应方法的控制,和后台交互之间的三层之间的联系。Cairngorm框架主要包括以下7个部分:

数据组:ValueObject,Model

控制组:Command,controller,event,Delegate

界面组:View

项目结构如图所示,其中Delegate是放在busses下面的。

下面简单谈谈Cairngorm框架中每个包的作用:

◆ValueObject:顾名思义,就是值对象;它的作用主要有这样几个:

1.包含整个程序中所需传递的数据,比如,界面输入的值,后台获取的值,等等,通常对应一个后台的vo类。

2.对界面对象的控制;

举例:我们常常会遇到这样的问题,在一个控件A中项要操作另一个控件B,比较麻烦,论坛上也常有这种问题。其实我们完全可以在 valueObject里面声明一个B控件的引用,然后在A中就可以操纵Model中的valueObject对象里面的B控件的引用(因为是按引用传递 的),就可以达到控制B的目的。

3.对数组绑定对象的控制,如list,将其绑定在一个数组,通过改变数组就可以改变该List。

4.防止flag变量;

5.可以用在自定义事件中,传递参数;

◆Model:model主要就是利用ValueObject来实现全局变量,(注意:在Flex中是没有全局变量一说的),所以使用Model和 单例模式,来实现全局数据的控制。(什么是单例模式?就是一个类,在一个程序中,只存在一个对象。这个概念在java中也有用到)。

以上介绍的是数据组,接着是控制组。

◆Command:command其实就是函数,继承自Command类。

◆Event:event的功能就是给界面调用command提供方便。

◆Controller:真正使command和event发生关系的还是controller。它其实相当于添加事件监听,触发某某事件,该相应什么command,都在这里面定义。

◆Delegate:对于远程数据的访问,Cairngorm是以用委托类,来获取数据然后传给调用函数。

所以,可以看出,在控制方面,Cairngorm框架很有优势的。

◆接下来就是View了。

Flex的一大好处,就是方便模块化编程,View包里面就是放的是自定义组件,在设计阶段,设计好的各个模块,都可以放置在这个包里面。以备以后代码重用。

下面通过个流程图讲解一下Cairngorm的工作流程,

1、在view触发Event:var loginevent:UserLoginEvent = new UserLoginEvent(user);

loginevent.dispatch();

如新建一个UserLoginEvent 然后将它发出。

2、这里UserLoginEvent是继承自CairngormEvent的,在UserLoginEvent中执行父类的方法就可以了,super(EventTypes.USER_LOGIN,true);

this.user = user;同时将user传递过去(其中EventTypes.USER_LOGIN,是EventTypes类中定义好的常量)。

3、在Controller中将EventTypes.USER_LOGIN,和相应的Command进行绑定。

private function addCommadListener() : void {

//监听登录事件 执行UserLoginCommad

addCommand(EventTypes.USER_LOGIN,UserLoginCommad);

4、然后就会在Command中新建一个委托类,通过委托类实现调用后台的java方法。

var syslogin:LoginDelegate = new LoginDelegate(responder);

syslogin.login(loginEvt.user);

5、委托类中进行了和后台的交互:public function LoginDelegate(responder:IResponder)

{

_remoteobject = serviceLocator.getRemoteObject("login");

_responder = responder;

}

public function login(user:User):void

{

var call:Object = _remoteobject.login(user); // 调用服务器的方法

call.addResponder(_responder);

}

然后通过执行Command中相应的result和fault方法处理结果,就是实现了flex和后天的交互:

var responder:Responder = new Responder(result,fault);

尊享推荐

365bet安卓中文客户端 无责任胡侃,谈一谈市场上主流的水草灯
365bet安卓中文客户端 2025年装个正版win10系统多少钱?详解购买渠道与费用明细
365彩票网app安卓官方下载 笔记本电脑怎么录屏-笔记本电脑录屏的三种方法
365bet安卓中文客户端 请问,北京什么地方有修派克钢笔的地方,谢谢,