Web发展趋势:RIA+SOA

日期: 2008-03-27 作者:松晨 来源:TechTarget中国

  Web开发正从基于MVC的Web架构向着被称为RIA+SOA基于客户端/服务器的模式发展,RIA表现出来的丰富的用户界面和SOA表现出来的服务将越来越受到吸引。


  现在已经有很多潮流的Web 2.0应用程序,但他们不会成为主流,因为下一代的网络平台已经出现,它就是RIA+SOA,它是一个更加完整的平台。


  联盟的状态


  目前,在网页中基于标准的是HTML , CSS和JavaScript,RIA开发者们为了建立丰富的用户界面就必须装配多个第三方库和框架,这种像”点菜”的方式,接近于建造一个RIAS,而把不和要的负担加在开发人员身上,而不是集中精力构建应用程序,开发人员必须得花费大量的时间去发现,整合而且得维护不同的RIS发展平台。同样也适应于SOA这一边,开发人员得研究如何创造服务,而且得考虑如何与他们的RIA前端去有机的结合在一起。开发人员需要一个平台,能把各方面的应用程序都能集成到一个开发环境,使他们可以集中精力的来做构建应用程序方面,但问题是:下一代RIA+SOA的平台是什么样子的呢?


  在开始最好的方法是按照RIA+SOA这些行为来构建应用程序,这些高级的行为主要包括:


  1. 设计应用程序的”感观”


  这经是总会出现应用,它包括的内容,例如:颜色,字体,图形,和一般的页面布局。


  常见的工具设置 :HTML , CSS和图片


  2. 整合构件


  构件概括了一套公有的功能,它们通过单一的组成,他们把包含这两个”外观与感觉”做为一种特色,也包括一些预先确定的动态行为, RIA就像搭积木一样的方便。


  常见的工具设置 : extjs ,Dojo,雅虎的yui脚本库和其他几个小的构件项目。


  3. 为用户界面添加动态的行为


  为用户界面创建动态行为主要涉及两件事:


  • 事件处理


  • 文档对象模型(DOM的)操纵


  当需要了解特定事件发生时(如用户点击一个按钮或服务所收到的反应),事件处理的能力就会显现出来,DOM的操控是指当在动态的用户界面将发生变化的基础上,收到一个事件。


  常见的工具设置 :基于jquery的JavaScript库 ,Prototype,和scriptaculous


  4. 消耗服务


  消耗后端服务是RIA关键能力的体现,它能够创建单页的用户界面交换数据的应用与服务。 它也可以使用户界面和服务层分开。最常用的方法与服务互动的就是Ajax。


  常见的工具 :基于jquery的JavaScript库 ,Prototype


  5. 创建服务


  服务提供了一个接口,以方便数据和应用程序的业务逻辑层相交互。


  常见的工具设置 :在你所选择的编程语言中可以创建服务的有很多个框架。


  现在,我们就能理解到建立基于RIA+ SOA的应用程序需要什么了,我们可以考虑一下如何把这些行为结合起来,以便于得到最有价值的发展。下面就来概述一下基于RIA + SOA平台的特征。


  支持HTML和CSS


  这两种语言的性能非常适合的去表现应用程序的”感观”,再加上他们对于大多数开发人员来说基于Web的用户界面都非常熟悉。我们没有理由不去再现它们的车轮。


  提供一个开放的组件框架


  正如先前所说,RIA就像搭积木一样的方便,有几个组件的工具包可以用到,像yahoo,Dojo和ExtJS。


  此外,还有几个独立的组件,也在较小的项目和个人中体现出来。你可以用这些组件去建立RIAS,但是也有一些捕捉点:


  1.将来也不可能有一个组件去满足你的全部需要


  2.整合不同的第三方组件可能需要自定义代码,同时还需要深入的去了解每个组件的工作方式。


  3.写一个新的组件是具有挑战性的,因为你要为这些选择的组件工具包写底层的API ,要么你就不得不从零开始写一个新的组件。


  4.一些组件框架,要求开发人员编写了大量的JavaScript来实现,而这些框架被那些很少或几乎没有JavaScript开发的经验人来说这会有问题了。


  为了解决上述问题,一个基于RIA+SOA平台提供的开放的组件框架,就需要有以下功能:


  •支持并且能够整合现有的第三方组件


  •能为新的组件提供方便的API


  •使组件能够被方便的标记(不需要JavaScript)


  •支持分类模式,可以让人轻松的提交,查找和使用这些新的组件。


  一个开放的组件框架将为开发人员提供这些组件资料的来源,并且很容易的就把这些组件整合到他们的应用程序中去。如果某一个组件不到位,它就可以很容易地创造出开放式的组件框架的API 。


  在RIA的发展和组件的零散性的今天看来,把组件整合到RIAS的重要性就体现出来了,开放的组件框架应该被认为是RIA+SOA平台的重要组成部分。


  提供一个完整的RIA设计模型


  RIAS的发展,做为用户界面的程序相比基于传统的基于WEB的应用程序更要受到关注。结果是,我们的下一代平台就需要提供一个完整的RIA设计模型,关键是以方便和简化用户界面编程的任务。这些任务主要包括:


  •事件处理


  •DOM的操纵


  •服务消费(Ajax)


  事件处理,DOM的操纵和Ajax,使这些富因物网的应用程序更”富有” 。它不需要通过太多的调查来考虑它们的相关性。为了说明这一点,让我们看看用一个RIA的登录窗口实现的提交典型的应用步骤:


  •登录按钮被点击(事件处理)


  •服务请求发送(Ajax)


  •某些类型的行为指令的展现(DOM的操纵)


  •服务回传(Ajax)


  •行为的指令隐藏( DOM的操纵)


  •登录”成功”的字样显示出来( DOM的操纵)


  尽管它们的关系比较密切,大多数的框架和库只提供整合这三者之间,让开发人员之间的差距缩小。为了说明这一点,让我们看看一些代码。在下面的例子中,我们会看到当其中一个组合框中的值发生变化时,第二个组合框中的值也随着变化。这个例子是用jquery写的,如下:


     $(function(){
    $(“select#comboOne”).change(function(){
    $.getJSON(“/combo.php”,{id: $(this).val(), ajax: ‘true’}, function(j){
    var options = ”;
    for (var i = 0; i < j.length; i++) {
    options += ” + j[i].optionDisplay + ”;
    }
    $(“select#comboTwo”).html(options);
    })
    })
    })


  现在,让我们看看如何用把处理事件, DOM的操纵和Ajax整合到一起做出这部分功能的。


  看上面这两个例子,完成同样的功能,但代码存在着相当大的差异。第一个例子,写了大量的代码和对应的JavaScript 。第二个例子,使用一个简单的表达式就可以做出同样的功能。让我们仔细的分析下面的语法。


     on=”change then r:load.combo2.request”
    在此代码段中,当


     on=”r:load.combo2.response then value  [property=rows,text=text,value=value]
    and effect[Highlight]”>
  
  在我们的代码中加入effect[Highlight],我们可以看到这样一个微小的影响,就可以让使用者知道该组合框中的价值使用已发生了变化。


  这些代码的实例表明,处理事件, DOM的操纵和Ajax的有机的整合提供了强有力而且简单的处理方法。开发人员很少或几乎没有JavaScript的开发经验,也可以发现它是一种简单易学的表现语言,像是遇到了上帝。这将会使他们开发的速度加快,因为他们没有必要走这些弯路。当然,也有开发人员认为,JavaScript用起来很舒服,并且很喜欢使用它。因此,一个完整的RIA设计模型还应该支持使用Javascript语言,在具体的方式中支持分离的行为,并做出标记。这是普遍被认为的JavaScript的随意性 。让我们来看一个例子:     $(“progress_images”).on(“r:login.request then show”).on  (“r:login.response then hide”);


  在这个例子中,标记是单独从JavaScript代码,它可以定义自己的行为-也就是, 当接收到登录请求消息时就”显示”,当接收到响应信息时就”隐藏”。这种设计的模型对于开发人员来说,把他们的RIA设计在JavaScript中,无疑是最好的。


  一个完整的RIA设计模型+ SOA平台是RIA+SOA平台的基础的分量。它为开发人员提供一个单一的综合处理机制,主要就是RIA设计的这些行为。最终结果是,开发人员可以建立丰富的用户界面,而不在像今天一样,可以大大减少代码的要求。


  提供了一个综合服务平台


  RIA只是为我们建立富应用程序目标的一半,我们仍然有必要为基于RIA+SOA的SOA提供一个答案。不幸的是,目前作为Web 2.0工具包和框架,主要侧重于RIA;它们提供很少或几乎不支持去建设服务。因为开发人员就需要把它们再次分离,以缩小这种差距,就这是个问题,这使得应用开发和维护工作增加不必要的时间消耗。


  下一代RIA+SOA平台必须正视这种差距,就需要提供了一个综合的服务平台,需要提供以下几点:


  • <!–[if !supportLists]–>对任何的一种编程的语言都提供创建服务的支持


  • 在RIA和SOA的层面上提供无缝的协作性


  • <!–[endif]–> 可以模拟消耗本地的服务


  纵观Web发展的历史,基于Web的框架已通过围绕某些特定的编程语言建成,而且在整个世界看RIA+SOA的这种技术似乎已经过时或者根本就没有必要。RIAS只需要与服务交换数据的应用,所以他们应该和编程语言无关。唯一需要联系的是, RIA和基于其SOA的服务应该是一个轻量级的以信息为基础的合约。


  RIA和SOA层的这种松散的耦合就打开了综合服务平台的大门,让开发人员使用任何编程语言,就来创建服务而不影响RIA层的应用程序。


  一个综合性的服务平台,也应该为RIA和SOA层提供无缝的协作性。具体来说,它应该可以替代开发人员认真处理好路由和数据信号的服务。这里有一个简单的方法来创建服务。这个例子使用了Java :   @Service (request = ‘login.request’, response =’login.response’)
    protected void loginRequest (Message req, Message resp)
    throws Exception
    {
    String username = req.getData().getString(“username”);
    String password = req.getData().getString(“password”);
    User user = UserDAO.login(username,password);
    if (user !=null)
    {
    response.getData().put(“success”,true);
    response.getData().put(“user”,user);
    return;
    }
    response.getData().put(“success”,false);
    }


  在上面的例子中,有两件事情要说明。首先,要把一个普通的Java对象变成一种服务,只需在Java的方法中添加一个”Service”的注释。这种注释既包含了服务的请求也包括了服务的响应信息,在这个方法的句柄上,将会使得路由配置相当容易。


  第二,服务请求和响应数据的机制简单明了。在示例中,整个User对象是放置在响应信息中存放。该服务平台对数据处理进行编组。结果是,开发者可以集中精力去写服务的逻辑而不是写粘合的代码,最终的结果是用尽量少的代码更好更快地去开发。


  最后,RIA和其基于消息的服务的合约就可以创建本地的模拟服务。本地模拟服务响应远程的请求,但他们可以存在RIA的内部。这是一个强大的功能,因为它为创建一个功能完全的RIA模型提供了一扇大门,而不需要写一行的服务代码。这些要地的模拟服务,可以放在一个单一的文件里,一旦用户界面开发完成了它就会去移除了。让我们来看一个例子:    on=”r:login.request then show or r:login.response then hide”/>
  
    Username: 
    Password: 
   
    on=”click then r:login.request”/>
    Login Form
  
    $MQ(‘r:login.response’,{‘success’:true,’username’:’foo’});
  
  模拟服务


  在上面的例子中,我们有一个登录的窗体生成一个服务请求r:login.request。当r: login.response接收到信息的时候,在r :login.request接收并隐藏时我们也可以看到一个图片将会显示。第二部分的例子是模拟服务。这次模拟服务侦听r:login.request服务请求和响应r:login.response信息后,在一秒钟内,就可以模拟服务的等待时间。登录的窗体不知道这个服务的具体位置,它简单的就可以看作是响应信息。这个简单的例子演示了如何创建一个功能完全的RIA模型,而不需要写任何的服务代码。此模型可以百分之百的可重用性,而且它有一个好处是让开发人员来创建预先定义好的服务合约。结果是:创建服务是大大简化了,因为服务的开发人员不仅有一个功能完全的样机作为参照,他们已经可以制定一套完整的服务界面。


  结论


  开发人员在Web应用程序的开发中正在做一个根本的转变,我们正在远离服务器端的MVC框架的Web 1.0 ,并为Web建立一个客户机/服务器体系架构,或者更明确的说这一转变正是RIA+SOA带来的。由于这一转变,开发人员就可以抛弃自己拼凑出来的网络开发平台,而转向丰富的Web应用程序。当然,转变创造了机遇。在这种情况下,要创建一个下一代互联网的平台的机遇,提供端到端的支持,来创建Web 2.0的应用程序。在Appcelerator,我们在一年前就看到了这种转变。我们的响应是建立一个彻底的支持RIA+SOA的Appcelerator平台。在这篇文章中引用的例子主要就是在Appcelerator的基础上。当然,在创建新一代的网络平台会有很多不同的做法,但在具体实施中这些通性应该保持不变。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

作者

松晨
松晨

相关推荐

  • 事件驱动框架和SOA在空军的应用

    空军正在利用SOA来改善数据共享,并实时跟踪战机,美国空军机动司令部的Michael Marek解释了企业可从中学习的经验。

  • 揭秘New Relic APM技术细节

    New Relic应性能管理(APM)套件主要用于Web软件开发。它允许用户在面向服务的架构(SOA)上跟踪关键事务性能,并且支持代码级别的可见性来评估特定代码段和SQL语句对性能的影响

  • 仅凭SOA和云无法解决业务数据管理风险问题

    SOA和云可以是某些恼人问题高效的解决方案;这一点我们已经知道了。但是也要记住它们并不是所有事情的直接答案,特别是当你的问题是业务数据管理风险,而不是技术问题时。

  • 联合创新,携手共赢 华为与Commvault签署全球合作联盟协议

    【中国,上海,2015年9月19日】在2015年华为云计算大会上,全球领先的信息与通信解决方案供应商华为与美国知名的数据管理软件及相关服务主要供应商Commvault签署全球合作联盟协议。基于合作协议,双方将会加大投入数据中心备份解决方案在云化环境下的“可服务化”技术研究 。Commvault公司全球业务发展副总裁Andreas May、华为IT数据中心解决方案总裁马力出席签约仪式。