翻译:基于工具的以数据为中心的RIA开发方法

翻译:基于工具的以数据为中心的RIA开发方法

原文地址:http://www.adobe.com/devnet/flex/articles/dcd_tools.html

伴随着富网络应用(RIAs)和面向服务架构的普及,以数据为中心的开发工具的需求也在增长。 通过提供丰富而引人入胜的体验,RIAs改善用户的满意程度,并提高了工作效率。 SOA是web应用开发中很自然会选择的架构,通过各种服务,它正越来越多地用于数据的公开。 在RIAs的开发中,这两种趋势导致了消费软件作为一种服务而受到了更强烈的关注。

构建以数据为中心的RIAs的挑战之一,就是需要以不同的数据格式(包括XML、JSON、和AMF)以及统一的方式,来消费各种类型的服务 (RESTful服务、web服务等等)。 为了应对这一挑战,开发人员需要一些有用的工具来创建技术无关的数据模型,并且需要一种途径来将这个模型绑定到应用

本文概述了两种方法:一种是以服务为中心的方法,应用基于服务的模型定义方法来处理各种不同的服务;另一种是以模型为中心的方法,用来定义一种通用的,跨客户端和服务器的程序数据模型。 本文还提及一种模型驱动的用户界面的创作方法,它采用了业界领先的Adobe Flash Platform来构建强大的以数据为中心的RIAs。 本文还讨论了数据同步、冲突以及按需数据访问等有关方面所面临的挑战。

富互联网应用

在网络计算的发展早期,应用程序的界面大多数是基于文本的,主要的开发困难集中在数据通信以及服务多样性问题的解决上。 SOA的发展有助于实现基于web的新软件传输模型(delivery models)。 随着软件即服务(software as a service (SaaS) )成为复杂软件产品公认的主流交付方式,人们迫切需求提供能更佳的用户体验。 RIAs通过将web的普及性与丰富的用户互动界面组合起来,可以提供更好的用户体验。 所指的“丰富”,表示能将客户端的互动性与直觉的用户交互结合起来,从而提供吸引人的用户体验,而“普及性”是指,几乎任何人在任何地方均能够使用应用程序的能力。 诸如社区网络等理念所伴随的技术进步正推动着许多所谓的“Web 2.0” 应用程序,在这些应用程序中,通过服务所公开的数据被认为是中心元素。 在RIAs中,本地计算能力可以用于显示用户界面、集成视频和动画、甚至用于离线数据分析。

RIA平台前景展望

对于设计人员、开发人员和消费者来说,RIA平台意味着技术的集成,它能够提供创建和交付有吸引力的应用程序所需的一切工具 (参见图1)。 以下是RIA平台主要的展望:

  • 1.无处不在的客户端运行时——运行时能够驻留于PC、移动设备以及(越来越多的)消费电子产品之中,从而实现各种目的。
  • 2.只需写入一次便可处处一致运行——假定需要强化浏览器和设备的存储碎片的作用,那么客户端运行时应该支持跨平台和浏览器的工作,并且应该针对各种设备提供一致的体验。
  • 3.设计人员-开发人员的工作流——设计是创建有吸引力的体验的关键因素,因此设计人员需要与开发人员紧密合作。
  • 不同类型数据的访问——RIAs通常能够访问各种不同格式的数据,例如JavaScript Object Notation (JSON) 和XML,它们来自各种服务,比如RESTful服务和web服务。 RIA 平台应该支持这一功能。
  • 4.开发者效率——缩短产品推向市场所需的时间是一个重要的竞争优势。 利用效率提升工具以及便于学习和易于维护的语言,开发者能够帮助机构或团体取得这一优势。
  • 5.数据同步、数据管理和按需数据访问——对于RIAs需要在断网环境中运行的RIAs来说,这些是必备的基本功能。

图1. RIA生态系统

构建以数据为中心的RIAs的挑战

因为一些机构投入资金来构建服务型的架构,所以RIA开发人员所面对的其中一个关键挑战便是与已存在的服务端技术如J2EE、ColdFusion、PHP或者web服务相结合。 为了达到这一目的,他们需要以一种无缝的方式在集成开发环境(Integrated Development Environment (IDE))中处理客户端和服务器代码。 此外,IDE应该提供设计时间工具,这些工具通过使用与服务操作和数据技术无关的表现来提取各种不同的服务和数据格式。

XML和JSON在交换大量数据的时候显得比较低效。 因此,对于这种情况,开发人员常常使用动作信息格式(Action Message Format (AMF))等二进制格式。 公开于AMF的各种服务能够在不同的语言中进行开发,其中包括面向对象(object-oriented)(Java)和面向脚本(script-oriented )(PHP) 的语言。 RIA 开发人员需要一种统一的方式来处理这些AMF服务,这与Web服务定义语言(Web Service Definition Language (WSDL))所提供的如何处理各种web 服务的统一方式类似。 通过利用技术无关的数据表现来提升开发人员的效率,IDE也能够用于帮助RIA开发人员创建用户界面。

Adobe Flash平台

Adobe Flash Platform (参见图 2) 包含下列产品和技术:

  • 1.Adobe Flash Player已经安装于 99% 的PCs,而且构成了 Adobe Flash Platform的核心客户端运行时。
  • 2.开源Flex框架提供各种抽象方式(abstraction)以便通过HTTP、SOAP或 AMF与各种完全不同的数据服务连接。Flex框架使用一种名为MXML的易于学习的陈述性语言用于开发用户界面。
  • 3.Adobe Flash Builder是一个以基于Eclipse 的IDE。它提供了强健的代码编辑、导航、交互式调试和所见即所得(WYSIWYG)的设计界面来加速应用程序的开发。
  • 4.Flash Catalyst等Adobe Creative Suite工具支持设计人员与开发人员的合作,以便创建有吸引力的用户界面。
  • 5.Adobe LiveCycle Data Services能够简化数据管理任务,比如跟踪变化、同步、分页和冲突解决等。

图2. Flex应用程序的架构

设计人员工具、客户端RIA开发工具和服务器端开发工具构成了创建丰富web应用程序的基础 (参见图3)。 当创建富于表现力的以数据为中心的RIAs时,存在一个工具使用的最佳点,在该最佳点处,工具相互之间有很好的整合性,并且可以为设计人员、客户端侧开发人员和服务器侧开发人员之间提供必要的工作流以便相应的工作能够顺利地进行。

图3. RIA开发工具

方法

创建服务的不同方式和完全不同的数据格式已经导致了所谓的服务地狱(service hell)现象,这一现象在客户端开发人员面前呈现出独特的挑战。 本节给出了处理这些服务的三种方法:以服务为中心的开发方式(service-centric development)、以模型为驱动的开发方式(model-driven development)和以合约为中心的开发方式(contract-centric development)。 本节内容还涵盖了这些方法是如何利用数据通信基础设施来解决与数据同步和管理相关的棘手问题。 所有三种方法均支持开发人员以统一方式调用服务、以面向对象方式访问服务响应、创建用户界面和管理数据通信。 这些均可以通过一种被称为Adobe数据模型(AdobeData Model)的与格式和技术无关的模型来实现。

Adobe数据模型(Adobe Data Model)

Adobe数据模型(AdobeData Model)支持开发人员定义数据实体(data entity)、实体之间的关系以及负责利用基于XML语言传送实体至数据客户端的抽象服务 (参见图4)。 除了实体和服务之外,模型中出现的定义还包括样式(styles)(它们能够将用户界面相关信息与数据类型进行捆绑)和注释(annotations)(它们允许特定用户将特定域信息添加至一个模型)。

图4. 具有实体和服务的范例模型

以服务为中心的开发方式

服务是指能够提供某种特定功能的操作的集合。 例如,WSDL文档是指公开于SOAP协议之上的一种服务。 以服务为中心的开发方式是一种客户端侧开发人员利用已经定义的服务来创建以数据为中心的RIAs的方法。 该方法具有三种主要的构造块(参见图5):

  • 1.服务定义
  • 2.服务分析
  • 3.基于模型的用户界面创建

图5. 基于工具的用于以服务为中心开发方式的方法

服务定义

服务定义具有三种主要组件:

  • 1.导入服务(Importing the service)——提供一种基于向导的方法以便连接各种服务器技术,例如PHP、ColdFusion、web服务和RESTful服务。
  • 2.服务内省(Service introspection)——在服务中自我检查可用的方法以及其相关的输入和输出参数。 这使得开发人员能以面向对象的方式使用该方法。
服务分析

在服务分析中,从一个或多个提供者那里获得的采样数据将进行自我检查,这些数据可以在运行时、开发过程中由应用程序查询获得。 这些采样结果可以用于在开发过程中提供提示和建议,这样开发人员将根据合适的上下文来引用相关数据。 当采样结果包含许多参数时,开发人员可以为返回的参数指明自定义类型声明,或找出感兴趣的由查询操作返回的参数子集,该参数子集以后可以被这些工具用于提供更多有意义的提示或建议。

图6. 分析服务

这一过程是由利用数据源接口查询数据源来开始的 (参见图6)。 数据自省过程(data introspection process)包含接收由数据源响应相关服务操作而返回的数据采样、对这些返回数据进行特征化处理、以及以面向对象的方式存储数据的一个或多个特征,以便未来由代码创建、提示和工具的用户界面创建模块使用。 通过识别直接来自协议或采样数据的底层数据类型和结构,可以实现对数据的特征化。 例如,当使用AMF协议时,返回的数据可以是"强类型(strongly typed)"。 在其它情形下,数据可以是"弱类型(weakly typed)"(例如在使用MXL或JSON数据的情形下),但之后可以由开发人员使用工具将其变为"强类型(strongly typed)"。 该工具可以支持对数据的特征化,而无需使用强类型,不论源中该数据是否是强类型。

对返回数据的特征化还包括为返回的数据推断出数据结构定义。 例如,由查询返回的数据可能具有基础的树状结构。 返回数据的数据结构定义可以通过使用基于返回数据格式的试探程序进行推断。 因此,对返回数据的特征化可以包括确定数据参数在一个数据结构中的相对位置。 例如,通过分析一个返回的XML文档的结构可以识别出嵌套对象。 在某些服务响应中,对返回数据的特征化要求基于用户的输入内容来识别感兴趣的返回数据结构的子集。 下面继续讨论数据参数位于树状结构中的的范例,开发人员可以指明只有树中的某一子集(或某些子集)是自己感兴趣的,这与使用Xpath为特定XML数据元素寻址是相似的。 这一优先选择条件可以由工具进行存储,并且可以用于向开发人员提供提示。

数据自省可以构成服务实体和操作的基础,并且能够生成相应的模型。

例如,考虑一个服务调用,该服务利用天气服务提供一个特定地点的温度。在该范例代码中,HTTPService标签具有一个URL和一个能够获得天气数据的操作指令。下面是一个文本框,该文本框带有与来自所查询的特定数据条目的数据绑定(由波型括号指明)。

 

    
    
  1. <mx :HTTPService id=“weatherService” url=“http : //weatherservice.example/weather”>
  2. <mx :operation   name=“GetWeather” />
  3. <mx :HTTPService />
  4. <mx :TextArea id= "temp" text= "The current temperature is   {WeatherService.GetWeather.result.CurrentTemp}" />

 

在数据自省模块中,开发人员实际上可以调用GetWeather 操作,将相关响应识别为Weather自定义类型,并且在开发过程中将结果引用为该类型。开发人员可以使用代码提示将currentTemp条目引用为Weather 自定义类型的属性,并且可以将其与用户界面创建模块的组件绑定,正如下一节中所描述的那样。该过程能够消除在处理弱数据时突然出现的许多困难。

基于模型的用户界面创建

基于模型的用户界面创建的过程包含下列两个元素:

  • 1.用于图形元素和直观手势布局以便绑定数据的设计界面,例如拖拽一个服务操作至图形元素之上。
  • 2.利用数据模型的机制(由工具在数据内省过程中存储的)以便将该模型与图形元素绑定。

代码生成器能够在用户界面创建过程中构成一个重要的构造块。 随着服务差异性的不断增加以及数据格式变得完全不同,开发人员工具中的代码生成器可以在以下方面帮助开发人员:

  • 1.抽象化服务调用机制——开发人员无需关心如何使用HTTP连接、SOAP请求或AMF请求,而只需发起一个函数调用即可。 生成的代码具有用于发起请求所需的所有功能。
  • 2.将从服务返回的数据抽象为对象——开发人员无需处理XML、JSON或AMF响应等数据格式,而以面向对象的方式访问数据。
模型驱动的开发方式

模型驱动的开发方式是一种成熟的开发过程,而且很久以来一直是软件工程的一个组成部分。 用于创建以数据为中心的RIAs的模型驱动开发方式正在成为一种主流趋势,因为它能够通过该模型来提供一个抽象层,从而处理与多种服务和格式相关的棘手问题。 模型驱动开发方式与以服务为中心的开发方式不同,在后者中,开发人员首先从模型开始,而非服务。 因此,开发人员能够控制数据属性和服务操作。 下面是模型驱动开发方式生命周期的若干重要元素:

  • 1.用于设计应用程序模型的模型设计套件,它包括用于设计实体及其属性(properties)、计算属性(computed properties)、有效性(validations)和约束性(constraints)的工具。
  • 2.模型的开发人员工具,它能理解模型并且提供代码生成器,以便生成RIA的用户界面元素。
  • 3.服务器组件,它理解模型并且能为数据访问以及在服务器上部署模型的机制提供完整的数据服务集。

Adobe Flash Builder和Adobe LiveCycle Data Services能够为基于模型驱动开发方式进行的RIAs开发提供一套全面的工具。

以合约为中心的开发方式

以合约为中心的开发方式(contract-centric development)的过程可以处理比如频繁地从一个或多个服务提供商改变界面和数据格式等棘手问题。 在多个团队独立地或平行地在客户端侧和服务器侧进行开发的情形下,它还能够加快以数据为中心的RIAs开发进程。 RIA的开发需要以下合约:

  • 1.服务合约(Service contract)——提供关于如何调用服务的相关服务细节;在某些情形下,服务合约可以在后面的开发生命周期中定义。
  • 2.数据合约(Data contract)—— 提供由服务返回的、作为调用的一部分的数据细节;其典型范例包括WSDL、XSD、XML和JSON等数据格式。

传统方法要求在开发项目开始之前,在客户端和服务器开发人员之间必须最终确定相关合约。 然而,也有其它选择,客户端侧开发人员能够以初始合约开始,并在开发过程中将其自己的定义添加至与服务器侧开发人员交换的合约。 其中的范例包括在客户端中添加新的操作或实体,而这些操作或实体可以由服务器侧开发人员在以后执行。

Adobe Flash Builder支持以合约为中心的开发方式(contract-centric development)。 开发人员可以根据XML和JSON合约生成各种模型,并且能够处理频繁改变的合约。 此外,一旦实际服务可用,这些合约能够方便地被它们所替换。

数据通信基础

以数据为中心的RIAs总是需要在客户端侧处理数据、高速缓存数据以及执行业务逻辑,并且在服务器侧更新数据。 消息和数据同步库可以构成RIA的通信中枢 (参见图7)。

图7. 基于工具的RIA通信过程

数据同步和管理

对于不定期联网的RIAs来说,数据同步是极为重要的。 这样的RIAs需要具有在用户离线时能够自动在本地高速缓存中存储数据,以及在用户上线时能够自动与服务器同步数据的机制。 作为这一过程的组成部分,RIA开发平台应该提供支持数据同步的工具,并且为开发人员提供处理同步过程数据冲突的机制。

数据管理是另一个重要的需求,它包括分页、自动数据持久化、以及在客户端侧记录对象的创建、更新和删除等操作。

此外,许多RIAs还要求与服务器之间必须保持极为可靠的通信连接。 这样类型的应用程序包括:

  • 1.在线银行和交易应用程序
  • 2.提供实时更新的Web应用程序
  • 3.客户支持应用程序

客户端侧数据管理库(参见图8)可以通过提供下列功能来帮助RIA开发人员:

  • 1.统一机制,用于不同服务的数据管理和同步的
  • 2.数据管理器,用于从客户端侧以及服务器侧处理数据更新,以及提供访问数据的正确接口
  • 3.数据仓库,用于离线工作流和批量更新
  • 4.Adobe数据模型(Data Model),用于抽象响应响应以及处理统一的类型
  • 5.一种基于客户端侧所作改变而自动调用创建、读取、更新和删除方法(Create, read, update and delete (CRUD) )的方式
  • 6.用于处理实体的单一复制以避免数据的错误更新和显示的机制,也称为高地人原则(highlander principle)
  • 7.当不能获得特定的数据属性或实体时,自动对从服务器进行调用。 这一按需数据访问也称为延迟加载(lazy loading)。 这也可以用于处理相关联的对象,并且只能载入相关对象的id属性。只有在需要的情形下,RIA才能够获取相关联的对象。

图8. 客户端侧数据管理库的结构

  • 当服务器推送数据或数据发生冲突时,发生在客户端侧的事件
  • 当需要获取数据的后续分页时,通过自动发起服务器调用来对数据分页提供的支持
网络监控工具

正如在前一节中重点讨论的那样,数据通信复杂性的不断增加以及完全不同的数据格式,导致了在RIA开发生命周期过程中对数据通信进行更深入分析的需求。

在RIA开发过程中,开发人员将会遇到下列问题:

  • 1.应用程序能够发送正确的数据,但服务器组件却不能获取这些数据
  • 2.服务操作不能在客户端侧返回正确的结果,但服务器日志却指示了其它原因
  • 3.应用程序执行速度缓慢,而开发人员必须确定是什么代码导致这种问题的发生
  • 4.服务器即将过载,应用程序至服务器的数据负荷必须进行优化

所有这些问题的解决方案是网络监测器,它是由RIA开发工具所提供的,并且开发人员能够在开发过程中使用它来对RIA应用程序进行更深入的分析。 网络监测器可以截取来自应用程序的通信,然后上报相关结果。 传统网络抓取工具可以提供数据负荷的信息,但在识别导致问题的代码方面技术落后。 Flash Builder网络监测器可以提供源代码至抓取的数据负荷之间的映射,这将帮助开发人员方便地找出问题的根本原因。

延伸与意义

以数据为中心的RIA开发方式也带来了一些独特的挑战。 本文已经给出了若干能够充分利用格式无关数据模型的方法和技术。 这些给出的方法使用创新的方式来构建应用程序,其中包括基于模型的用户界面创建、用于加速应用程序开发的代码生成器,以及客户端侧的数据管理等,这些应用程序使得RIA开发人员能够方便地处理数据同步、自动数据持久化、分页和按需数据访问等。 RIA 应用程序开发在开发的所有三个方面均促进了工具的创新,这三个方面是:设计、客户端侧开发和服务器侧开发。

未来,期望这些工具能够通过在工具之间提供无缝客户端-服务器数据调试以及设计人员-开发人员组件的双向工程等功能,进一步聚焦于以数据为中心的RIA开发工具的最佳点。 Adobe Flash Platform提供了能够将RIA应用程序开发带向更高水平的机制和世界领先的工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值