Web开发正从基于MVC的Web架构向着被称为RIA+SOA基于客户端/服务器的模式发展,RIA表现出来的丰富的用户界面和SOA表现出来的服务将越来越受到吸引。现在已经有很多潮流的Web 2.0应用程序,但他们不会成为主流,因为下一代的网络平台已经出现,它就是RIA+SOA,它是一个更加完整的平台。
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
.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],我们可以看到这样一个微小的影响,就可以让使用者知道该组合框中的价值使用已发生了变化。