Flex Cairngorm框架详解
?
什么是Cairngorm Cairngorm微架构是一个轻量级的RIA开发框架。 Cairngorm主要就是对开发Flex应用程序应用了一系列的设计模式,从而使开发出来Flex程序可扩展性,可维护性都大大提高。其工作流程很清晰: 1.Front Controller Listens for User Gestures 2.Commands Do All the Work 3.Delegate Server-Side Business Logic to Business Delegates 4.Business Delegate Finds Services with the Service Locator 5.Transfer Data as Value Objects 6.Store State in the Model Locator and Let Model Notify View 在Cairngorm基础上开发RIA,将会在大大提高开发和维护的效率。. Cairngorm本身并不是一个完整的企业应用,它只是提供了一个开发的骨架,Adobe称之为体系.在这个体系中包括以下几个部分: 1. Business(业务逻辑部分) 2. Command(命令部分) 3. Control(控制部分) 4. Model(数据模型) 5. View(界面视图) 6. VO(ValueObject) Cairngorm框架最新版本是2.1,是面向Flex 2.0的,如果你用的事Flex 1.5那么你应该使用Cairngorm 1.5。你可以到这个网站下载到框架源码、例子贺文档http://www.cairngormdocs.org/ 在这里我们将对Cairngorm框架中的各个部分进行一个简单的介绍。 ? 先来看一下Control部分 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部分 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 部分 VO 部分 最后提一下vo,其实IValueObject和ValueObject没有任何实际作用,唯一的就是提高vo类的可读性,表示该类是一个ValueObject,可能是为将来设计用的。我们不需要实现任何接口函数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |