我在前面两篇blog中都说到:“REST是简化Java Web开发的良药”。
Java的劣势在何处?与前些年相比,现在看的已经很清楚了,Java的劣势就在于做Web表现层的开发。Web表现层开发需求变化频繁,Java这类静态类型的语言不够敏捷,严重影响了开发的效率。
而JavaEE的一个最大的缺点,就是企图在服务器端搞定一切,我将这种开发方式称作“传统集中式的开发方式”。标准的J2EE三层架构——Web表现层、业务层、持久层,也许对于传统的基于HTML表单的Web应用来说是恰当的,但是现在已经显得落伍了。JavaEE企图在服务器端完全搞定Web表现层的开发,给自己制造了一个大麻烦。无论是从这门语言本身,还是从支持这门语言主要的公司Sun、IBM、BEA、Oracle来说,他们并不擅长此道。擅长此道的是哪些公司呢?Adobe/Macromedia、M$、Borland/CodeGear。
如果Web表现层必须要在服务器端开发,Ruby on Rails的优势与JavaEE相比要明显的多。RoR要比任何主流的JavaEEWeb表现层框架和技术(Struts、WebWork、SpringMVC、JSF、Tapestry、etc.)更加灵活,学习成本更低,开发效率更高。
换个思路来思考,如果我们不再假设客户端就是几乎毫无智能的ThinClient将会如何?假设我们能够充分利用客户端的Ajax组件库和各种RIA技术,将Web表现层完全或者绝大部分前推到客户端来开发,并且通过REST风格的API来与服务器通信,那么服务器的角色就变成了类似于Web服务提供者(注意:这里和Web服务还是有很大的差别,因为REST在这里是用于同一个应用内部的通信,即连接一个应用的客户端和服务器端)的角色,这样就能够极大地简化服务器端Java的开发工作,让它从自己所不擅长的领域退出来,集中精力做自己最擅长的一些工作。
这个趋势其实在3年多前我在JavaEye论坛中宣传基于XMLHttpRequest的开发方式的时候就已经看到了,现在这个趋势已经越来越明显了,新一代Web开发方式的面貌已经逐渐浮出水面。Adobe AIR/Flex、M$WPF/Silverlight都是这样一类的开发方式,当然Ajax也可以以这种方式来做开发。我给这样一类开发方式取名叫做“RIA+REST”。
在服务器端搞定一切当然也有好处,因为这样可以获得最佳的控制,安全问题解决起来也比较容易。但是其代价就是无法得到最佳的交互设计,强迫用户不得不承受降级的使用体验。如果这样的用户体验是能够接受的,那么采用这种方式做设计和开发问题不大。但是如果这样的用户体验是无法接受的,那么就需要严肃地考虑RIA+REST的开发方式了。与传统集中式的开发方式相比,这是一类新型的分布式的开发方式,在一些方面(交互设计、服务器端架构)得到了简化的同时,也会使得一些方面(服务器端的控制能力、安全性)复杂化,所以要求架构师作出慎重的权衡。分布式应用必然会带来很大的复杂性,但是REST无疑是基于Web的分布式应用的最理想的架构风格,在Web领域REST的优势要比RPC和分布式对象等架构风格大的多。同时REST是简练实用的,可以很大程度上降低分布式应用的巨大复杂性。
根据我的经验,在绝大多数中小型项目中,Web表现层开发的工作量要比后面两层的开发工作量的总和还要大,也就是占到项目开发工作量的一半以上。当用户需要较为苛刻的使用体验时,传统集中式的开发方式完全无法满足要求,而必须由Ajax来补充。然而,对于有复杂交互需求的应用来说,RoR应用的开发效率同样也会受到基于DHTML的开发效率的拖累,而无法充分体现出其敏捷的优势。
如果Java将做Web表现层开发的负担卸掉,让客户端的RIA技术来承担,那么Java在服务器端开发中与Ruby相比的劣势就不是那么明显了,甚至在很多方面还有优势。从整体架构的开发效率来考虑,
RIA + REST + Java
RIA + REST + Ruby
两种架构组合也许可以达到大致相同的级别,即使Java在开发效率上仍有劣势,但是也不会像在传统集中式的开发方式中那样悬殊。有很多传言说基于RoR开发的项目与基于Java开发的项目相比,开发效率能够高出5-10倍。我虽然对于Java并不乐观,但是对于RIA+REST这种新的开发方式,我估计开发效率的差距应该可以降低到2倍左右。不过开发效率只是一个方面,如果服务器端的代码经过良好重构,重用性非常好,不会在半年之后就成为必须要抛弃的遗留代码,那么Ruby在开发效率方面的巨大优势也许只会停留在最初的阶段。随着代码的积累,这种开发效率的优势会逐渐降低下来。
Ruby会不会拥抱RIA呢?RoR2.0将会是完全基于REST设计的开发框架,他们现在拥抱REST,就是为将来拥抱RIA做准备。对于传统集中式的开发方式来说,应用REST当然也会带来很大的好处,但是我认为这并不是RoR的主要的目的。RoR拥抱REST,是希望使自己在将来的技术变迁过程中处于一个非常有利的位置。对于未来Web开发技术的发展,REST处在一个核心的位置,它是连接客户端和服务器端的纽带,REST也会极大影响客户端架构和服务器端架构的设计和建模。“面向资源的Web应用”,将会是未来几年的一个技术热点。
Java在对于REST的支持这个方面行动要迟缓的多。官方正在制订的JSR311规范主要还是面向不同的应用之间的集成,也就是主要覆盖SOAP所覆盖的领域,而不是面向RIA+REST这样一类新型的Web应用开发方式。不过,一些支持REST的Java框架已经存在,也可以基于Adobe的Flex框架(今年之内就会开源)来做设计,这些框架使得基于Java做REST设计和开发成为了一件比较容易的事情。我们不指望Sun已经有很多年了,日子不是一样过来了吗?Sun其实可以坦承:“我不做老大已经很多年了”。
综上所述,我认为支持REST对于JavaEE而言,意义甚至要比RoR更大。是否能够拥抱未来Web开发技术的发展趋势,对于Java语言未来的命运来说是至关重要的。
原文地址:http://bbs.flashas.net/read.php?tid=1199
分享到:
相关推荐
"基于RIA+REST架构的房产管理WebGIS平台研究" 该论文研究了基于RIA+REST架构的房产管理WebGIS平台,旨在提高房产管理的效率和科学性。该平台通过集成housing-related功能机构、逐渐实现房产业务数据的空间化、在Web...
### 集成Flex与J2EE的面向RIA+Web应用的研究与实现 #### 引言 随着企业信息化进程的推进,基于B/S(浏览器/服务器)模式的J2EE多层架构成为主流的Web应用开发方案。然而,传统J2EE开发受到核心组件EJB模型限制的...
总的来说,JavaFX是Java开发者构建富互联网应用程序的强大工具,通过学习这个官方教程,你将掌握如何利用其特性来开发功能丰富、界面美观的跨平台应用。教程会涵盖基础概念、控件使用、布局管理、事件处理、动画制作...
通过RIA Service进行SQL数据库的连接,网上资源并不多,也不详细,这里我只提供一个显示,方便初学者学习,数据库我就不加了,有什么数据都可以,别忘了安装RIA Service toolkit这个东东,还有就是datagrid把...
以上就是关于“Flex+Lcds+FB3+Java+MyEclipes7.5”安装的知识点介绍,理解并掌握这些内容,开发者可以构建出高效的、与后台紧密集成的富客户端应用。通过学习提供的Word文档,将有助于更深入地了解每个环节的具体...
### Flex+LCDS(Blazeds)+Java 入门教程知识点详解 #### 一、引言 在软件开发领域,尤其是针对富互联网应用程序(RIA)的开发,Flex 和 LCDS 的结合为开发者提供了一种高效的方式来构建高性能的前端用户界面,并...
在"flex+java+mysql登录"这个场景中,我们主要探讨的是如何使用Flex客户端与Java后台进行通信,以及通过Java处理数据库交互来实现用户登录功能。 1. Flex数据库操作:Flex中的数据访问通常通过 BlazeDS 或 LCDS ...
在ria4Java中,可视化开发指的是利用ExtJS库来设计和实现用户界面的过程。通过拖放工具、预览和配置选项,开发者可以快速构建UI,无需编写大量的HTML和CSS代码。此外,ria4Java可能还提供了与后端数据源的集成,使UI...
1、采用了WCF RIA Services来和服务器端传输数据,具体来说就是Silverlight项目 类型中的WCF RIA Services 类库项目,因为这个更快捷。 2、采用了MVVM设计模式来实现UI元素也UI界面逻辑分离,这个的好处地球人都知道...
标题与描述均聚焦于“Flex4.5 + Tomcat6.0 + MyEclipse 9.0+ Java+Blazeds环境配置和使用”,这一主题涉及了多种技术栈的集成,包括Flex4.5(FlashBuilder)、Tomcat6.0、MyEclipse 9.0、Java以及Blazeds。...
在Java端,可以通过 BlazeDS 或 LCDS 来实现AMF的序列化和反序列化。此外,Flex还可以通过SOAP协议调用Java Web Service,或者使用HTTPRequest对象发送自定义HTTP请求。 5. **FlexDemo**:这个文件很可能是包含示例...
RIA在Web应用体系结构中提供富客户端操作体验,其目标是整合桌面客户端和WEB应用程序的优势,而常用的开发技术就是如上提到的Java,JavaScript,Flash/Flex。AJAX既不是一个产品也不是一项新技术,但它确实是RIA体系...
Flex+LCDS+JAVA入门教程主要涵盖了三个关键的技术领域,它们分别是Adobe Flex、LCDS(LiveCycle Data Services)以及Java。这些技术结合在一起,能够构建高效、交互性强的富互联网应用程序(RIA)。以下是对这三个...
【标题】"Sample : Ria Services + MVVM + MEF" 涉及的是一个使用Silverlight 4.0、WCF RIA Services 4.0、MVVM(Model-View-ViewModel)模式以及MEF(Managed Extensibility Framework)构建的示例项目。...
在"Flex+ActionScript+JAVA等学习教程集合"中,我们关注的是如何将Flex、ActionScript与Java进行集成,以实现更强大的功能。ActionScript是Flex中用于控制组件和处理事件的语言,而Java则通常作为服务器端的语言,...
总之,这个“Flex+blazeds+java企业门户网站完整源码”是一个很好的学习资源,可以帮助开发者掌握如何利用Flex构建富用户体验的Web应用,并通过BlazeDS实现与Java后端的有效交互,进而构建高效、功能强大的企业级...
ArcGIS+RIA开发讲座+for+Silverlight+API
随着富互联网应用(RIA)的发展,Flex 成为了构建动态交互式应用程序的一个重要工具。结合 LCDS(LiveCycle Data Services)和 Java 技术,可以构建出功能强大且响应迅速的 Web 应用。本文旨在为初学者提供一个详细...
Flex4+BlazeDS+Java+JDBC+MySQL是一个经典的前端与后端交互技术栈,用于构建富互联网应用程序(Rich Internet Applications,RIAs)。在这个架构中,Flex4作为客户端的展示层,BlazeDS作为服务器端的数据通信中间件...