2007 年 4 月 24 日
Ruby on Rails 开发和 java™ 开发有着本质的不同。在跨越边界 系列的最后一期中,Bruce Tate 将概述使用 Rails 从头开发一个复杂、可伸缩的 Web 站点时所发现的二者的主要差异。
Rails 开发人员经常把 Java 开发人员看作是沉闷而劳碌的老古董。而 Java 崇拜者则经常认为 Ruby on Rails 只是一个玩具,根本不能用于任何严厉的软件开发。作为一名对这两种技术都有着广泛使用经验的顾问,我认为真实的情形介于这两种观点之间。由于跨越边界 系列文章即将结束,因此我打算对它们再作一次比较。本文并非考察某种非凡的技术或语言,而是主要介绍我当前正在从事的项目,并将它与我以前从事的 Java 项目进行比较。另外,我建议您阅读“跨越边界”系列的前几期文章,对相关主题作更深入的了解。这种直接的说明可让您在二者之间权衡利弊,并可能使您在数据库 Web 应用程序 green-field 的开发中通过使用 Rails 获益。
业务问题
关于本系列
在 跨越边界 系列文章中,作者 Bruce Tate 提出这样一种观点,当今的 Java 程序员们可以通过学习其他方法和语言更好地武装自己。自从 Java 技术明显成为所有开发项目最好的选择以来,编程前景已经发生了改变。其他框架影响着 Java 框架的构建方式,从其他语言学到的概念也可以影响 Java 编程。您编写的 Python(或 Ruby、Smalltalk 等语言)代码可以改变编写 Java 代码的方式。 本系列介绍与 Java 开发完全不同的编程概念和技术,但是这些概念和技术也可以直接应用于 Java 开发。在某些情况下,需要集成这些技术来利用它们。在其他情况下,可以直接应用概念。具体的工具并不重要,重要的是其他语言和框架可以影响 Java 社区中的开发人员、框架,甚至是基本方式。
不论是 Ruby on Rails 框架还是任何 Java 框架都不能解决所有问题。为了提高成功的几率,需要长期、细致地考察业务问题,理解四周的各种假定情况,以及了解您的团队。只有这样才能选出正确的语言来进行开发。
去年,Arvato Systems 聘请我带领团队构建 ChangingThePResent.org,它是一种新平台,用于将非赢利性团体和捐赠人组织在一起。与很多 Internet 公司一样,我们向客户展示了可购买的实际产品。与其他公司不同的是,这些 “产品” 指的是提供机会,比如:一名癌症研究员一小时服务收费 50 美元、帮助盲人收费 30 美元,或者保护一英亩雨林一个月收费 20 美元。我们面临两大挑战:一份很紧凑的时间表和长期的复杂性。
开发工作从九月份开始,要求必须在十一月份之前建立起一个站点,以便有机会赶上圣诞节期间的通信量高峰。(最终我们超出了十一月份这个期限两星期。)在其他开发语言中,基于 Java 的解决方案可能要花费 6 到 18 个月才能完成这一任务。因此生产力是一个很重要的考虑因素,这与 Java 部署思想相悖。
通过对竞争对手和项目的考察,我们了解到:我们希望能够天天给站点带来几百万次点击的通信量。而我们需要天天有几十万次成功的点击,因此可伸缩性也是一个考虑因素。这与 Java 部署思想相符。
最后,我们了解到:发布初始站点只是一个开始。我们只实现了总体规划的百分之三。因此我们所选的技术需要根据复杂性和负载作出一些调整。我认为 Ruby 语言在复杂性方面会更易于调整,因为它提供了对更高级语言和特性(如开放类)的支持,以及具有更少配置需求和更简单、集成化编程模型的 Rails 框架。
虽然我们面临着时间和可伸缩性方面的挑战,但是也拥有一些其他的有利因素。我们拥有一张完全空白的候选名单:可以选择想要的任何技术、任何团队。可以定义项目、培训和全部的技术。我们可完全自由地作出选择。
Java 语言是一种优秀的通用语言。它总是应用于新的技术领域,如嵌入式系统和移动设备。Java 语言在广泛关注的集成方面也表现优秀。它具有高性能、流行并受到平台的良好支持。但是正如您在本系列中所了解到的那样,Java 语言并不是用于数据库支持的 Web 应用程序的 green-field 开发的最佳选择。
相比之下,Ruby on Rails 框架则是新的。并没有很多人使用 Rails 开发高通信流量的站点,并且几乎不存在什么使用 Rails 多年开发项目的经验。但它仍然是一种高生产力的数据库支持的 Web 应用程序开发的框架。最后,尽管我们对 Rails 缺乏开发长期项目的经验和并未得到广泛部署有所顾虑,但那份紧凑的时间表驱使我们选择了 Ruby on Rails。
作出这个决定之后,我们发现招募项目人才非常轻易。我们还发现早期的生产力优势非常显著 —— 甚至比预期的还要好。我们确实碰到了一些早期的稳定性问题,因此加强了测试工作的力度。此后稳定性得到了极大的改进。
原理
每个框架设计者都使用一组假定来构造该框架的重写原理。学习遵守该原理的约束可使您愉快地进行编程,而挑战这些约束则会使您的编程受挫。Rails 框架和 Java 框架拥有很多不同的原理。