`
madfroghe
  • 浏览: 122192 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Cairngorm文档--模块化示例程序解读

    博客分类:
  • Flex
阅读更多
模块化示例程序解读

A Modular Sample Application Explained

原文地址:

http://opensource.adobe.com/wiki/display/cairngorm/ModularSampleApplicationExplained

译稿最后修改时间:2010-6-1 16:02





介绍

本文仅是烟水晶框架构建应用程序的一个小小示范。阅读本文前请查看《简单示例程序解读》。



展示的例子是MAX2009会议上的“用Flex框架构建数据驱动型应用程序”主题演示的一部分。客户端代码示例是以烟水晶架构为基础构建和扩展的。关于此次演示的更多信息请查看克里斯多夫克雷茨 的博客。



此处浏览客户端代码。

InsyncModularExtendedShell

InsyncModularExtendedAPI

InsyncModularExtendedContacts

InsyncModularExtendedMessaging

InsyncModularExtendedExpenses

服务器端组件

下载

安装介绍

为了运行示例程序,服务器端组件必须安装。但是对于理解本教程并非必须。



这个示例使用了欧芹程序框架,然而本教程不会深入探讨欧芹框架的特性而是代以烟水晶框架的指导原则的特点。然而,此处概念上的实践可以应用于当前Fash平台上各种各样的应用程序框架。



项目和包结构

InsyncBasic程序仅展示了一个功能区,处置联系人。InsyncModularExtended示例程序关注如何以烟水晶框架推荐俺的方式处理其他功能区域,例如消息和开销,以进一步了解烟水晶框架。模块化的思想将会反映在项目和包的组织方式上。



当烟水晶框架推荐代码以建构层(表现层、应用层、域层、基础层)的方式组织在一起,并且有各自的功能区,功能区之外代码组织功能性更强。InsyncModularExtended是分解在不同的项目内的,每个项目表现独立的功能区,并编译为独立的Flex模块。



另外的外壳项目InsyncModularExtendedShell允许此组程序以将功能区载入至通用UI外壳程序内的方式开始运行,通用外壳程序提供了在各个功能区之前全局导航功能。



一个API项目InsyncModularExtendedAPI用来在不同的功能区之前共享核型可用对象。要注意尽可能少的使用,以最小化相互的依赖和最大化可修改性。



这个项目通过其包裹结构反映出功能区组成。功能区内的全部联系人对象归于联系人包,建构层次放置在功能包之下。



功能区的更多信息请查看模块化开发中的创建功能区。



外壳 – 模块载入和导航

外壳程序定义了在功能区之前导航的通用UI外壳。因为功能区包含在Flex模块之内,外壳程序载入和卸载这些模块利用烟水晶框架的模块类库。实体模块SWF文件引用上下文文件InsyncContext,摘要如下:

<!-- Infrastructure -->

    <module:ParsleyModuleDescriptor objectId="contacts"

        url="../../insync-modularExtended-contacts/bin-debug/ContactsModule.swf"

        domain="{ ClassInfo.currentDomain }" />

并且以通用的可视组件ContentViewStack的InsyncViewLoader进行载入。注意,这个载入组件只需要Flex SDK 的IModuleInfo接口进行注入。

<mx:ViewStack xmlns:fx="http://ns.adobe.com/mxml/2009"

                      xmlns:mx="library://ns.adobe.com/flex/mx"

                      xmlns:core="insync.core.*"

                      xmlns:spicefactory="http://www.spicefactory.org/parsley">



     <fx:Metadata>

            [Waypoint]

     </fx:Metadata>



     <fx:Script>

            <![CDATA[

                    import insync.application.ContentDestination;

                   

                    import mx.modules.IModuleInfo;



                    [Bindable]

                    [Inject(id="contacts")]

                    public var contacts:IModuleInfo;



                    [Bindable]

                    [Inject(id="messageCompose")]

                    public var messageCompose:IModuleInfo;



                    [Bindable]

                    [Inject(id="expensesModule")]

                    public var expensesModule:IModuleInfo;

            ]]>

     </fx:Script>



     <fx:Declarations>

            <spicefactory:Configure/>

     </fx:Declarations>



     <core:InsyncViewLoader moduleId="{ ContentDestination.CONTACTS }"

                                              automationName="{ ContentDestination.CONTACTS }"

                                              width="100%"

                                              height="100%"

                                              info="{ contacts }"/>



     <core:InsyncViewLoader moduleId="{ ContentDestination.MESSAGE_COMPOSE }"

                                              automationName="{ ContentDestination.MESSAGE_COMPOSE }"

                                              width="100%"

                                              height="100%"

                                              info="{ messageCompose }"/>



     <core:InsyncViewLoader moduleId="{ ContentDestination.EXPENSES }"

                                              automationName="{ ContentDestination.EXPENSES }"

                                              width="100%"

                                              height="100%"

                                              info="{ expensesModule }"/>



</mx:ViewStack>

这个可视载入组件InsyncViewLoader允许指定方案处置模块载入时发生情况或者载入过程的发生错误。InsyncViewLoader是InsyncModularExtendedAPI项目的一部分,其行为并不仅仅和外壳程序发生关联,也关系到其他功能区的载入下一层组件,所以必须提供一致性的行为。



功能区的独立开发和测试

当程序由多个功能区组成,多个团队能够独立开发外壳程序下独立的不同的功能区,这将减少开发时间。InsyncModularExtendedContacts项目下的ContactsModuleRig能够以最简表单模拟外壳程序来集中联系人功能区域。者不单是为了减少编译和手工测试时间,也能以增加开发者数量的形式提高整个项目的开发效率,项目建立一次即可独立开发,和管理各自独立的功能区之间的依赖。



敏捷测试

整个InsyncModuleExtended项目内,各个独立的功能区都有属于各自的单元测试套件。这是测单元测试套件可以快速运行,这是重要的敏捷单元测试最佳实践。



InsyncModularExtendedContacts项目的测试套件使用了FlexUnit4.浏览ContactsTestRunner可以理解如何使用和在哪里使用。注意单元测试并不测试MXML或者其他可视组件。烟水晶框架推荐将难于测试的可视组件的行为提取到表现模型和域模型内的专用对象。



也要注意单元测试的测试对象的独立性也就是颗粒的缺陷本地化和快速测试组件。如果对象包含依赖,测试就要以mock framework ASMock加倍注入和控制,就像SaveContactCommandTest。Insync测试组件关注于替代对象行为的联系。例如ContactsTest类就是用来测试联系人域的边界检查。



配置和联系不属于单元测试,可以通过功能测试高效进行和实现高覆盖率。当前的Insync示例并没有功能区展示功能测试套件。功能测试套件是非常重要,也是任何企业级Flex程序开发的关键部分。



域可用性验证

InsyncModularExtended项目使用烟水晶可用性验证类库,用来将一般在可视组件内的可用性验证功能抽取和集中在客户端域内。关于域验证的更多信息和可用性验证库的其他特性请单击这里。



错误处置

一个明智的错误捕捉策略能够给RIA系统光明的机会,也就是优雅的回退机制。Insync示例展示了一个通用的用来处置遥控服务返回错误的结构。烟水晶集成类库提供了欧芹标签来定义和处置任意模块内遥控对象的全局错误。InsyncModularExtendedShell项目的AlertHandler类定义仅是在FlexSDK的日志内记录错误日志。

[GlobalRemoteObjectFaultHandler]

public function logError(event:FaultEvent):void

{

     LOG.error("A server error occurred. event={0}", event.toString());

}

另外的遥控服务调用的全局错误处理,其他对象的自定义行为执行的遥控服务调用错误。烟水晶集成类库的Command标签提供了一种CommandFault标签用来处置在任何建构层面上的错误。



例如,InsyncModularExtendedContacts项目需要在保存操作失败时显示一个警告框,同时在常规可视组件上显示失败信息。SaveContactCommand在Command对象内直接声明了一个CommandFault。

public function execute(event:ContactEvent):AsyncToken

{

     return service.save(event.contact) as AsyncToken;

}



public function result(savedContact:Contact, event:ContactEvent):void

{

     cache.updateItem(event.contact, savedContact);

}



public function error():void

{

     dispatcher(new AlertEvent("Unable to save the contact."));

}

这个实现(error方法)仅派发一个事件,AlertHandler对象派发一个全局警告可视控件。

[MessageHandler]

public function showAlert(event:AlertEvent):void

{

     var text:String = event.text;

     if (text == "" || text == null)

     {

            text = "An error occurred.";               

     }

           

     Alert.show(text);

}

这个全局警告控件集中定义而且能够更有灵活性的由用户体验团队决定如何更改全局错误处理控件。同时改进了Commands的可测试性。



特别的可视控件上显示失败信息是独立于Command和仅定义在可视控件上的,关于这个看ContactFormPM

[CommandError(selector="save")]

public function onSaveFault(event:ContactEvent):void

{

     status="Unable to save contact.";

}

这里就是模块化烟水晶框架建立的程序的示范终点了。可以更自由的在示例内浏览或者在这里进行反馈。我们会进一步的完善这个示例所展现出的特性,用来展示更多的使用烟水晶框架开发企业级Flex程序的真实状况。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/laohliang/archive/2010/06/02/5639763.aspx
分享到:
评论

相关推荐

    Flex-cairngorm-demo我喜欢的

    "Flex-cairngorm-demo我喜欢的"是一个基于Cairngorm框架的示例项目,开发者对其表现出了浓厚的兴趣。 Cairngorm的核心概念包括: 1. **Model**: 模型层负责处理业务逻辑和数据管理,通常与后端服务进行交互。它保持...

    Cairngorm开发文档中文版

    Cairngorm是一种轻量级的ActionScript框架,主要用于构建Flex和Adobe ...通过阅读"Cairngorm 开发文档中文版.pdf",你可以深入了解每个组件的使用方法以及如何在实际项目中整合这些组件来构建高效、可维护的应用程序。

    cairngorm-kerneos-2.2.0-sources.jar

    jar包,亲测可用

    cairngorm-2.2.2.swc

    cairngorm-2.2.2.swc Flex中的一款框架

    Cairngorm-Flex.zip_Cairngorm_flex

    这个框架的核心理念是通过分离业务逻辑、用户界面和数据模型来实现代码的模块化和解耦,从而使得开发者能够更有效地管理和维护复杂的Flex项目。 Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用...

    Cairngorm 开发文档中文版

    Cairngorm开发文档中文版PDF包含了详细的框架介绍、组件用法、示例代码以及常见问题解答,是学习和理解Cairngorm框架的重要资源。对于想要使用Flex和ActionScript进行企业级应用开发的开发者来说,掌握Cairngorm能极...

    [cairngorm入门]introducing_cairngorm.pdf

    - **官方文档**:Adobe官方提供了详细的Cairngorm文档和示例,是学习Cairngorm的首选资源。 - **在线教程**:网上有许多关于Cairngorm的教程和博客文章,涵盖了从基础知识到高级主题的内容。 - **社区支持**:Flex...

    cairngorm3 module的学习

    通过分析和运行这个示例,你可以更直观地了解Cairngorm 3框架如何在实际项目中运用模块化开发。 学习Cairngorm 3,你需要理解其核心概念,并通过实践项目来巩固理论知识。`cairngorm3ModuleTest`是很好的起点,它...

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

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

    flex Cairngorm 开发文档中文版.pdf

    10. **实际应用示例**:为了帮助开发者更好地理解和应用Cairngorm,文档可能包含了一些实际项目案例,展示如何在实际开发中应用这些概念。 通过阅读这份中文版的Cairngorm开发文档,开发者不仅可以了解框架的基本...

    cairngorm2_2_1-src.zip

    Cairngorm 2.2.1 是一款针对 Adobe Flex 开发的轻量级MVC(Model-View-Controller)框架,它为构建可扩展、模块化且易于维护的富互联网应用程序(RIA)提供了强大的支持。这款开源框架借鉴了 Struts 的设计模式,...

    flex-Cairngorm框架

    Flex Cairngorm框架详解 ...总的来说,Flex Cairngorm框架通过提供一套规范化的开发流程和组件,帮助开发者构建结构清晰、可维护性强的Flex应用程序。通过理解并熟练运用这些概念,可以显著提升开发效率和代码质量。

    Flex入门文档 -王一松

    - **第一个Flex程序**:通过一个简单的“Hello World”示例,初学者可以快速上手Flex的基本语法和结构。这有助于理解Flex的应用程序是如何组织和运行的。 #### 4. 可视化页面组件 - **UI控件介绍**:Flex提供了...

    Cairngorm学习文档

    【Cairngorm框架详解】 Cairngorm是Adobe Flex开发中的一个轻量级MVC(Model-View-...Cairngorm提供了一种结构化的方法来构建Flex应用程序,使得代码更易于理解和维护,对于中级Flex开发者来说是一个理想的工具。

    Cairngorm例子

    在提供的文件中,"library.swf"可能是Cairngorm框架的一个运行示例,它包含编译后的Flex应用程序,展示了如何在实际项目中使用Cairngorm组件。而"catalog.xml"可能是应用程序的配置文件,列出库中可用的组件或资源,...

    Silverlight Cairngorm-将Cairngorm移植到.NET

    《Silverlight Cairngorm-将Cairngorm移植到.NET》是关于将经典的Flex框架Cairngorm应用于Microsoft的Silverlight平台的一项技术实践。Cairngorm是一个轻量级的MVC(Model-View-Controller)框架,常用于构建富...

Global site tag (gtag.js) - Google Analytics