zoukankan      html  css  js  c++  java
  • 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);

    本文章属于本人和博客园所有,如有转载请注明出自http://www.cnblogs.com/xucheng
  • 相关阅读:
    Win7系统中打开exe 无反应
    IE 浏览器主页劫持 如何修复
    win10 airpods显示已配对,但就是连不上怎么办?
    tp5 layui 渲染 时间戳转换为日期时间格式
    为什么要设置 繁琐的密码
    美食摄影 – 明确目的
    MsMpEng.exe进程停止删除或弹出设备,导致移动硬盘无法正常弹出,怎么办?
    单抗热门靶点 | VEGF | TNF-α | CD20 | HER2 | PD-1 | IL-6R | CD47
    EZH2 | Ezh2 | 组蛋白甲基化酶/组蛋白甲基转移酶
    宇宙微波背景辐射 | 著名实验
  • 原文地址:https://www.cnblogs.com/xucheng/p/Cairngorm.html
Copyright © 2011-2022 走看看