Cairngorm框架简介

发布于,归属于flex沙发还空着,抢! 共有334人围观    

Cairngorm是Iteration::two的开源项目, 现在已经被Adobe收购,是使用Flex的RIA开发的最佳实践(best-practice)框架.详情可以访问:(http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm;jsessionid=1912159D899CA9F4CCF37E41EE9B2401)。

在Cairngorm基础上开发RIA, 将会在大大提高开发和维护的效率。.

Cairngorm本框架包括以下几个部分:

  1. Business(业务逻辑部分)
  2. Command(命令部分)
  3. Control(控制部分)
  4. Model(数据模型)
  5. View(界面视图)
  6. VO(ValueObject)

在这里我们将对Cairngorm框架中的各个部分进行一个简单的介绍。

先来看一下Control部分

Control中有3个基类:CairngormEvent, CairngormEventDispatcher和FrontController

CairngormEvent继承与flash.event.Event, 他包含一个data成员,用来传递参数数据之用。

CairngormEventDispatcher是一个单例类(singleton),用 来广播用户发起的动作类事件(CairngormEvent),主要的调用方法是 CairngormEventDispatcher.getInstance().dispatchEvent().

FrontControllers可以说是控制中心。在这里你要做的工作是将事件 (CairngormEvent)和命令(Command)之间的映射关系注册在它的成员中( 该成员类型是Dictionary),通过下面的类似方法进行注册。 addCommand(OrderRequestEvent.EVENT_GETUSERORDERREQUESTS, GetUserOrderRequests);

如此一来,凡是CairgormEventDispatcher广播出来的事件都会在这里进行查找,找到某个event对应的command,然后会执行command的execute()方法。

FrontController必须要在你的系统中实例化,具体的实例化方法如下:

<mx:Application xmlns:control=”com.domain.project.control.LoginController” … >

<control:LoginController />

</mx:Application>

我们再来看Command部分

在Command中定义了ICommand接口,在2.0中叫Command,其实没有区别,只不过是名字上的修改更能体现接口的意思罢了。在ICommand接口中定义了一个唯一需要实现的方法execute(),这其实就是典型的命令模 式,我们要做的就是实现此接口,并不需要关心命令模式的具体实现方式。

  • Model部分在Model中定义了接口ModelLocator,我们只需要实现该接口,并把所有需要办绑定的数据放在这里就可以了。一般我们 都采用单例模式 (Singleton)来实现,而且根据项目模块进行分类,而不是一股脑儿的把所有数据都扔到这里了事。可以说ModelLocator是系统的数据中 心。
  • Business部分在Business中定义了接口IServiceLocator,另外的Responder已经在2.1中被 mx.rpc.IResponder代替了。 我们需要将所有的RPC服务登记在该接口中,采用mxml的形式来单例实现IServiceLocator,如下面的例子所示:<cairngorm:ServiceLocator xmlns:mx=”http://www.adobe.com/2006/mxml”

    xmlns:cairngorm=”com.adobe.cairngorm.business.*”>

    <mx:HTTPService url=”broker/heartbeat.action”

    result=”event.token.resultHandler( event )”

    fault=”event.token.faultHandler( event )”

    showBusyCursor=”false”

    useProxy=”false”

    resultFormat=”e4x”/>

    <!– Remote Object     –>

    <mx:RemoteObject destination=”OrderManagementService” showBusyCursor=”true” result=”event.token.resultHandler( event );” fault=”event.token.faultHandler( event );”>

    </mx:RemoteObject>

    </cairngorm:ServiceLocator>

    并且需要在系统中实例化一个ServiceLocator,如下面所示写在Application中:

    <business:Services />

    使用方法:

    在某个Delegate中通过下面的方式得到该service的实例,之后就可以进行函数调用了:

    this.service = ServiceLocator.getInstance().getRemoteObject( “orderManagement” );

View 部分

再来看看View中都有什么。View中有ViewHelper和ViewLocator。
ViewLocator是一个单例类,用于统一管理和获取ViewHelper。类似于ServiceLocator,和FrontController,在这里可以注册多个ViewHelper,并通过关键字直接找到需要的ViewHelper实例。
ViewHelper是具体用来操作某个视图的类,它是通过其成员变量view来引用到具体的视图,当它被实例化的时候就会在ViewLocator中注册一个ViewHelper
如:
<viewhelper:ListViewHelper />
将实例化一个ViewHelper,并在ViewLocator中注册一个名为listViewHelper的ViewHelper实例,通过该id可以得到其实例的引用,如:
var listViewHelper:ViewHelper = (ViewHelper )ViewLocator.getInstance().getViewHelper(”listViewHelper”)

(如果您喜欢这篇教程,可以通过支付宝打赏我们1元哦,拜谢!)

跟作者说两句

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-? :) :( :!: 8-O 8)