技术开发 频道

RIA是三层应用体系的二次革命

  让我们从这个观点来考察第一次社会大分工的结果。不妨问问以下几个问题:

  1.如果把应用逻辑层从Java换成C#(或者其他语言,看你的实际情况),程序还能跑吗?数据库需要改变吗?

  回答:能。数据库不用修改。

  2. 如果把数据库从Oracle换成Mysql(或其他数据库,同上),程序还能跑吗?逻辑层需要改变吗?

  答:如果程序没有依赖于某个数据库独有的特性,就没有问题。通常需要对数据库驱动程序和连接信息作一些修改,对于配置良好的应用程序,这些修改是很小的。

  从这些问题我们可以认为,两层结构的这一次社会大分工是非常成功、非常彻底的,数据库和编程语言基本上已经完全解耦,数据库不再依赖于编程语言,编程语言也不再依赖数据库。同时我要强调一点,之所以能够进行这样完全的解耦,主要功劳在于标准化的数据库查询语言——SQL的存在。试想如果每种数据库都有自己的一套完全不兼容的API会怎样?那样任何一个程序都会绑死在特定的数据库上,根本谈不上什么分层。

  现在再来看一看三层的情况,同样有如下问题:

  如果把业务逻辑层从C#切换到Java,表现层需要修改吗?

  问题来了。这种情况下何止是需要修改,所有的ASP.NET Server Control全部废掉了,除了用JSP重写一遍以外,别无他法。这种问题对于Java来说更加严重,因为Java表现层框架可以说是山头林立,每个框架都有自己的一套语法机制,换个框架基本上就意味着推倒重来。这也是Java社区为什么从前几年就开始推崇“无侵入”设计理念的重要原因——切换的代价太大了。

  基于此种现状可以得出结论:相对于第一次大分工来说,三层应用这一次分工是不完全、不彻底的。像ASP.NET或JSF,甚至包括ROR的RHTML,这些使用服务器生成技术的框架只能叫做伪三层应用,因为表现层被绑死在了特定的后端技术上,根本没有脱离后端平台获得重用的机会。在这些框架里,表现层只能算是应用逻辑层的附庸,还谈不上是独立的一个层。

  第二次大分工还没有完成,三层应用还不算完整,那么谁来发起二次革命,完成未竟的事业呢?这就引出了我在标题提出的观点:RIA将完成三层体系的二次革命。

  我不想再重复RIA有哪些好处、带来什么体验之类老生常谈,只想说从历史发展来看,RIA的出现是时代使然,它的出现将补上三层结构最后那缺失的一部分。从RIA技术发展的现状也可以清楚的看到这种趋势:所有现代RIA技术,包括Flash/Flex、Silverlight、Ajax、Curl等等,它们的一个基本的共同点就是不依赖于特定的后台技术,可以和任何服务端搭配使用。甚至可以说,不具备此特点的技术不应当称之为RIA。(当然,各种RIA技术或多或少还是有一定平台倾向,但做到平台无关性不再是一个困难的目标)此外我在前面也说过,多层技术的发展有赖于层与层之间的标准接口,这种趋势现在也已经非常明显。XML-RPC、SOAP、JSON、REST各种技术的不断涌现,无不是顺应历史的要求,力图解决接口标准的问题,为三层结构的最终实现奠定必要的物质基础。

  Ajax是略微特殊的一个案例。尽管也称之为RIA,但相较Flex和Silverlight这样完整的解决方案,许多Ajax框架还是不太容易脱离服务端生成技术。OPOA(One Page, One Application)的概念多年前就已经出现,其核心思想就是不要再让服务器参与页面生成,在浏览器中利用Javascript来构造一个完整的应用。但现状来看,用Ajax实现OPOA在许多实例中仍然有很大难度,Ajax在所有RIA方案中对后台的依赖性是最大的一个。不过HTML/CSS/Javascript仍然在不断进步,利用一些尚未标准化的技术(如Google Gears)也能解决大多数问题,Ajax的前景应当还是值得期待的。

  历史大势,浩浩荡荡,顺之者昌,逆之者亡。表现层脱离后台技术的桎梏,自由独立地发展,这已经是确定不移的趋势。试图将表现层绑定在后台实现上的技术(典型代表ASP.NET和JSF),尽管在设计上极尽精妙,终究是背离历史发展方向的,有如再贤明的君主也无法掩盖集权专制的弊端。唯有RIA,相信将会“道路越走越宽阔”。

查看原文地址

0
相关文章