`

Cairngorm 扩展

    博客分类:
  • flex
阅读更多

 

 

在一次flex技术交流会上,一位演讲者把他列出来的六个框架做了比较,cairngorm说成是最保守最简单的一个框架。在我使用过的框架中,就数用它用得最多,心里好似被泼了一盆凉水。(Cairngorm,PureMVC,Mate,Swiz,Parsley,Robotlegs)一半没有见过,闲话不说了。

在网上发现一篇文章,cairngorm扩展。这文章依我的理解就是在command里面可以直接驱动页面,而不是在command里面驱动model,model再驱动页面。cairngorm有ViewHelper,利用它也可以达到同样的效果。

 

文章如下:

最近,我公司计划将技术框架由J2EE+ORACLE迁移到FLEX+J2EE+ORACLE,RIA是大势所趋,用户体验越来越重要。公司在FLEX前端选择了cairngorm微架构,用于处理客户端交互与服务器远程通讯。如何发挥架构优点,避免架构缺点成为一个关键问题。本文的主要目标就是针对cairngorm微架构过于依赖Model Locator的缺点对架构进行调整和扩展,同时还简化了Cairngorm框架的工作流程。

一、Cairngorm框架的工作流程:

1.         前端控制器(FrontController)监听用户行为

前端控制品是Cairngorm事件的唯一监听者,但其不并做任何操作,只是集中注册并管理事件(Event)与命今(Command)的映射关系。

2.         命令(Commands)执行所有用户操作

前端控制品(FrontController)监听到事件与命令有匹配时,便告诉命令(Commmands)调用execute()方法处理事件。

3.         服务器端业务逻辑委托给Business Delegate

当命令(Commands)执行时,它只是关心是否获取到数据,而并不关心获取到什么具体数据。因为经常需要从服务器端获取数据,此时命令(Commands)更喜欢把它委托给其它类去操作。所以需要处理服务器端业务逻辑的时候,你都可以委托给命令(Commands)可以调用的Business Delegate类去处理。

4.         Business Delegate在Service Locator中寻找RPC Services

Business Delegate给命令(Commands)和RPC Services提供一个无缝接口。Business Delegate通过查找和匹配 PRC Services的名称来调用services并返回结果给命令(Commands)。命令(Commands)要从Business Delegate获取返回结果数据必须通过IResponder接口(mx.rpc.IResponder),只有这样Business Delegate才知道命命令(Commands)有onResult()和onFault()来处理返回的数据。

5.         把数据存储为Value Objecs

强烈推荐把数据存储为Value Objects。

6.         在Model Locator保存状态并且让Model通知View

Model Locator是一个保存应用程序全部状态和包含Value Objects的地方。当应用程序状态改变时,Moel Locator 通过Data Binding方式来通知View改变。

Cairngorm框架的工作流程存在如下主要问题:

二、Cairngorm框架的工作流程问题分析与解决办法

       该工作流程在实践中的一个主要问题是Model Locator全局单例类,该设计将应用中的所有数据集中于Model Locator,有很多优点,也导致了众多问题出现,如:

1.         灵活性低:相当于一个新的GOD类,知道应用中所有信息。而复杂应用中的众多数据难以被一个GOD类包含。框架对Model Locator存在严重依赖,未来的变更将变得困难。

2.         问题测试困难:Model Locator对所有Commands公开,当出现数据问题时,难以检查问题原因。

3.         数据校验困难:View通过绑定刷新显示,难以对数据进行检查和校验,从而也不能更友好的进行用户提示。View不能直接得到数据,不方便对数据进行检查和其他处理。

框架扩展方案主要有如下2种:

1.         在命令(Commands)获取返回结果数据,分发数据变更事件。UI对象(View)监控数据变更事件,更新View。

a)         原理:本方案直接利用了FLEX的事件处理机制,显得比较直观。

b)        优点:不再依赖Model Locator。View监控解决了数据校验问题。

c)         缺点:增加事件嵌套层次,增加了复杂度。命令(Commands)的重用变得困难,因为一旦重用就存在多个View监听同一事件的问题,出现事件交叉。问题测试困难没有彻底解决。

2.         UI对象(View)作为事件的发起者,将View更新的方法变成Responder,从事件传递给命令(Commands)。命令(Commands)获取返回结果数据后,调用View更新的方法更新View。在同一个Application中同时启动多个View实例不会出现数据交叉影响的情况。

a)         原理:Responder,利用了函数式编程。View应该知道当数据变化时如何更新自己。

b)        优点:无数据交叉和事件交叉。不依赖Model Locator。解决了数据校验问题。本方案是变化小、影响小、效果好的解决方案。

二、扩展后的Cairngorm框架

扩展后的cairngorm框架示意图(仅包含扩展部分)

 

 

扩展后的框架图(中间一层为原Cairngorm框架中的部分类)

1.         Event的扩展和调用

a)         事件Event继承自ViewCallbackEvent

b)        在View中定义回调方法callbacks

c)         在View中根据用户请求分发事件ViewCallbackEvent

2.         Command的扩展

a)         Command继承自ViewCallbackCommand

b)        Command获得事件Event中的callbacks

c)         Command执行Delegate,从服务器获取数据

d)        获取数据后,调用callbacks更新事件对应的View

 

thanks:http://blog.csdn.net/wolf_linn/archive/2009/07/24/4373180.aspx

 

another:http://gain-loss.org/?p=416

分享到:
评论

相关推荐

    Cairngorm.swc文件

    5. **Event**:Cairngorm扩展了Flex的内置事件系统,允许自定义事件类型,这有助于更好地组织和处理应用中的不同操作。 6. **Microkernel**:微内核是Cairngorm的基础架构,它负责初始化和管理框架的其他组件,如...

    Professional Cairngorm

    #### 第28章:Cairngorm扩展 - **扩展机制**:讲解Cairngorm的扩展机制及其应用场景。 - **社区贡献**:鼓励开发者为Cairngorm社区贡献自己的扩展模块。 #### 第29章:回顾与展望 - **发展历程**:回顾Cairngorm的...

    flex as资料

    《Flex与AS3开发深入解析——Cairngorm扩展的有效应用》 在现代Web应用程序开发领域,Adobe Flex作为一款强大的富互联网应用(RIA)开发框架,因其强大的图形用户界面(GUI)构建能力和ActionScript 3(AS3)的编程...

    Flex Cairngorm之旅(小项目实例)

    Cairngorm扩展了这个概念,增加了服务定位器、事件代理、命令和远程代理等组件,使得在Flex中构建复杂应用更为便捷。 在这个小项目实例中,你可能会遇到以下几个关键知识点: 1. **服务定位器**(Service Locator...

    Flex之使用Cairngorm(3) - Command & Event

    Cairngorm扩展了Flex的事件模型,引入了ApplicationEvent和ModelLocatorEvent等自定义事件。ApplicationEvent通常用于在整个应用范围内的通信,而ModelLocatorEvent则与数据模型的改变有关。当Command执行完毕后,它...

    Cairngorm开发文档中文版

    这个框架是基于模型-视图-控制器(MVC)设计模式,旨在提高应用的可维护性和可扩展性。Cairngorm由Adobe开源社区推出,旨在为开发人员提供一套组织和管理代码的规范,使他们能更有效地开发复杂的富互联网应用程序...

    Cairngorm例子

    这个框架是开源的,由Adobe社区维护,旨在帮助开发者实现更有序、可扩展和可维护的代码结构。 在Flex开发中,Cairngorm框架提供了一种组织应用程序逻辑的方式,它强调了分离关注点,使得业务逻辑、用户界面和数据...

    cairngorm中文版

    Cairngorm框架是Adobe Flex开发中的一个核心MVC(Model-View-Controller)框架,它为构建可扩展、可维护的富互联网应用程序(RIA)提供了一种结构化的方法。Flex是一种基于ActionScript 3.0的开发工具,用于创建在...

    cairngorm + lcds最小包.rar

    结合使用cairngorm和LCDS,可以构建出高效且可扩展的Flex应用。在最小工程包中,开发者可以学习如何配置和集成这两个工具,理解它们如何协同工作来处理数据请求、实现数据推送以及优化用户体验。此外,这个最小工程...

    Flex开发框架cairngorm入门实例教程

    这个框架的设计目的是为了提高Flex项目的可维护性和可扩展性,通过分离业务逻辑、视图和控制层,使得代码更加模块化。在Cairngorm中,模型(Model)、视图(View)和控制器(Controller)之间的通信是通过事件驱动...

    flex框架之Cairngorm框架(二)

    这个框架旨在提高Flex应用的可维护性和可扩展性,通过分离业务逻辑、用户界面和数据模型,使得开发者能够更高效地组织代码。 在Cairngorm框架中,主要包含以下几个核心组件: 1. **Controller**:控制器是...

    [cairngorm入门]introducing_cairngorm.pdf

    - **可扩展性**:由于其基于事件的架构,Cairngorm可以轻松地扩展新的功能而不破坏现有的代码结构。 - **易于测试**:Cairngorm的设计鼓励使用接口和服务层,这使得单元测试变得更加简单。 #### 五、Cairngorm的...

    Cairngorm2.rar

    Cairngorm是Adobe Flex社区中的一个开源框架,主要用于构建大型、可扩展的富互联网应用程序(RIA)。这个框架是基于MVC(Model-View-Controller)设计模式的,旨在提高Flex应用的可维护性和可扩展性。Cairngorm 2.1...

    使用了CairngormWithExtensions.swc的登陆Demo

    Cairngorm框架虽然经典,但是有些很严重的问题: 1.不支持通知视图. Cairngorm2.1之前可以用ViewHelper 和 ViewLocator,但是自从...所以后来有了基于Cairngorm扩展的swc文件。 有兴趣的朋友,可以一起研究一下。

    Cairngorm-Flex.zip_Cairngorm_flex

    Cairngorm框架是Adobe Flex开发中的一种著名轻量级MVC(Model-View-Controller)框架,由Adobe公司的专业团队设计,旨在提高Flex应用程序的可维护性和可扩展性。这个框架的核心理念是通过分离业务逻辑、用户界面和...

    cairngorm3实践源码

    2. **分离的ServiceLocator**: 在Cairngorm3中,ServiceLocator是独立的,可以单独配置,增加了项目的可扩展性和可测试性。 3. **增强了EventHandling**: Cairngorm3的事件处理更加健壮,支持事件分发和订阅的多级...

    Cairngorm.swc+Cairngorm+开发文档中文版.rar 套装

    通过深入阅读文档并实践示例,开发者可以掌握如何使用Cairngorm构建可扩展、可维护的Flex应用,并提升其在ActionScript 3和Flex领域的专业技能。无论是新手还是有经验的开发者,都应该珍惜这个收藏版的套装,因为它...

    cairngorm 框架介绍(详细介绍了Adobe Cairngorm框架)

    Adobe Cairngorm框架为Flex和ActionScript开发提供了强大且灵活的MVC实现,通过ServiceLocator、EventBroker、Command等组件,帮助开发者构建可维护、可扩展的应用程序。了解并熟练运用Cairngorm框架,可以显著提升...

    cairngorm3 module的学习

    ** Cairngorm 3 模块学习指南** Cairngorm 3 是一款基于 Adobe Flex 和 ActionScript 3 的轻量级MVC(Model-...同时,不断探索和研究其他开发者的经验和代码,以及参与社区讨论,都是扩展Cairngorm 3知识的有效途径。

    Cairngorm框架swc包

    最新的扩展Cairngorm框架swc包

Global site tag (gtag.js) - Google Analytics