脸书台湾评论大陆:Cairngorm

来源:百度文库 编辑:九乡新闻网 时间:2024/05/02 08:52:14
Cairngorm
介绍:简单来说,就是为方便FLEX开发企业级应用而开发的一个微架构。这个东西有什么用处?假如你们项目比较复杂,需要3个开发员以上来共同开发,是不是需要一个约定好的开发方法?那么相信我,Cairngorm是一个最正统的选择(官方推荐),虽然开始时有点难学(好像这论坛里有 Cairngorm文档的中文翻译)。而做小型项目或项目是由你自己一个人开发的话,那,就斟酌考虑吧,因为或许项目比较小的情况下,你会发现使用 Cairngorm是一个累赘。不过即使开发不使用他,我建议有时间的话还是最好DOWN下来看看,毕竟Iteration:two(被Adobe收编了)的大量企业级应用的 design patterns还是很值得学习的。
官方网站:http://labs.adobe.com/wiki/index.php/Cairngorm
下载页面:http://opensource.adobe.com/wiki/display/cairngorm/DownloadsCairngorm(中文名:“烟水晶”)是一个轻量级的Flex RIA程序开发框架,从而使程序可扩展性、可维护性都大大提高,其本身并不是一个完整的企业应用,它只是提供了一个开发骨架,Adobe称之为体系。Cairngorm主要就是对开发Flex应用程序应用了一系列的设计模式,从而使开发出来Flex程序可扩展性,可维护性都大大提高。其工作流程很清晰:1.Front Controller Listens for User Gestures前端的控件监听用户的行为。注意它只是监听,并不会做任何反应。2.Commands Do All the Work控件监听以后调用Commands来做相应的事情,Command做了所有工作。3.Delegate Server-Side Business Logic to Business Delegates把服务器端的业务逻辑委托到 Bussiness Delegates中。因为很多时候command需要获得服务器端数据,所以这样一来它可以直接调用Bussiness Delegates而不用关注如何连接数据的细节,实现了信息隐藏。4.Business Delegate Finds Services with the Service LocatorCommand调用Business Delegate 后,Business Delegate 通过Service Locator来找到相应的RPC services,然后执行实现从服务器端取数据。5.Transfer Data as Value Objects把传输过来的数据存储为Value Objects。这点大家应该都很熟悉,比如想要查询一个公告,就必定创建一个公告类,来存储每一个公告的标题等信息。6.Store State in the Model Locator and Let Model Notify View在Model Locator 保存状态并且能使Model检测到View的变化。这样一来用户操作就能直接影响Model,比如添加物品到购物车,Model中的购物商品就会自动增加。在Cairngorm基础上开发RIA, 将会在大大提高开发和维护的效率。.Cairngorm本身并不是一个完整的企业应用, 它只是提供了一个开发的骨架, Adobe称之为体系。在这个体系中包括以下几个部分:1. Business(业务逻辑部分)2. Command(命令部分)3. Control(控制部分)4. Model(数据模型)5. View(界面视图)6. VO(ValueObject)Cairngorm框架最新版本是2.2,是面向Flex 3.0的,如果你用的事Flex 2那么你应该使用Cairngorm 2.1。你可以到这个网站下载到框架源码、例子贺文档http://www.cairngormdocs.org/在这里我们将对Cairngorm框架中的各个部分进行一个简单的介绍。Control部分Control中有3个基类:CairngormEvent, CairngormEventDispatcher和FrontControllerCairngormEvent继承与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必须要在你的系统中实例化,具体的实例化方法如下: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,如下面的例子所示:result="event.token.resultHandler( event )"fault="event.token.faultHandler( event )"showBusyCursor="false"useProxy="false"resultFormat="e4x"/>并且需要在系统中实例化一个ServiceLocator,如下面所示写在Application中:使用方法:在某个Delegate中通过下面的方式得到该service的实例,之后就可以进行函数调用了:this.service = ServiceLocator.getInstance().getRemoteObject( "orderManagement" );View 部分再来看看View中都有什么。View中有ViewHelper和ViewLocator。ViewLocator是一个单例类,用于统一管理和获取ViewHelper。类似于ServiceLocator,和FrontController,在这里可以注册多个ViewHelper,并通过关键字直接找到需要的ViewHelper实例。ViewHelper是具体用来操作某个视图的类,它是通过其成员变量view来引用到具体的视图,当它被实例化的时候就会在ViewLocator中注册一个ViewHelper如:将实例化一个ViewHelper,并在ViewLocator中注册一个名为listViewHelper的ViewHelper实例,通过该id可以得到其实例的引用,如:var listViewHelper:ViewHelper = (ViewHelper )ViewLocator.getInstance().getViewHelper("listViewHelper")VO 部分最后提一下vo,其实IValueObject和ValueObject没有任何实际作用,唯一的就是提高vo类的可读性,表示该类是一个ValueObject,可能是为将来设计用的。我们不需要实现任何接口函数。