解读Ruby on Rails的成功秘籍(1)

在Java社区关于Ruby OnRails的争论已经相当激烈并且在将来一段时间没有停止的迹象。Rails的支持者称赞它的惊人的效率,与Java开发相比效率大约是10:1。作为Java程序员,您下意识的反应是不相信任何宣传过高的效率,因为您可能以前听到过这些,然而实际让您很失望。

Java 提倡者日益坚持Ruby on Rails是一个玩具,不能伸缩,会生成坏的代码,并且只能开发简单的应用程序。但是随着对Rails的赞扬不断出现(通常来自可信的来源),一项更加谨慎的任务是理解Rails能做好什么事情,并把它的思想带回到Java平台。在本文中,将探究为Rails带来巨大效率的核心特性(即秘笈)。

Rails基本原理

Ruby on Rails框架不是大家所想的典型的应用程序开发框架。Rails 的创始人 David Heinemeier Hansson 通常把该框架称为固执己见的软件,并且他喜欢打破长期存在的约定。David 做出了非常有哲理性的决策并在整个框架中严格遵循这些决策。遍布于 Rails 内的核心观点有:

◆无缝集成:Rails 聪明地利用了 Ruby 语言的最好特性。它扩展了 Ruby,但您很难说出 Ruby 在哪里结束,Rails 从哪里开始。您也可以看到 Active Record(Rails 的持久引擎)和模型-视图-控制器(MVC)框架之间进行了很好的集成。例如,您可以编写三行代码,创建一个表,然后立即为该模型生成用户界面。

◆约定优于配置:为保持良好的灵活性,Java 框架保持了大量普遍的配置文件。Rails 不采用这种策略。它为方法、类、表和列采用普通的项目目录结构和简单普通的命名约定,以推断哪些已配置在 Java 应用程序中。结果是,Rails 应用程序只需要对应 Java 应用程序的一小部分配置代码,一般是十分之一或更多。

◆低重复:不要重复自己(Don’t Repeat Yourself,DRY)是 Rails 社区的一个常见术语。Rails框架委员会使用通常看起来像是 Ruby 语言的扩展的方法来把重复的任务抽象出来。正如您在本系列的 第三篇文章 中看到的,Rails 的元编程策略使每行代码都执行更多的任务。

◆即时反馈:使用Rails,对于您所做的大多数工作都会给出即时反馈。编写一行代码并保存后,在加载下一个Web页面时将激活您所做的更改。更新了您的数据库以后,迁移可以向您即时显示更改。

实践基础

Ruby on Rails底层的观点全都建立在实际经验的基础上。Rails框架是从开发受欢迎的Basecamp项目管理应用程序时的实际使用经验成长起来的。

专注于某个领域

反对其宣称的过高生产率的争论通常类似于这样:如果获得了一把好的锤子,就很难找到另外一把生产率达到两倍的锤子,更不用说把生产率提高 5 到 10 倍了,因为锤子已经发展演变几千年了。但是把Ruby on Rails与各种通用目的的Java框架相比较的人是不得要领的。

通过从根本上改变工具的本质可以在某些方面提高 10 倍的生产率。现在专业的制造者使用钉子枪能够在用锤子钉入一颗钉子的时间内钉入很多钉子。像钉子枪一样,Rails 也是有专门用途的。它是一个专门编写来用于单个领域的框架:新的支持数据库的Web应用程序。

我猜想现今构建的应用程序有一半是支持数据库且基于 Web 的应用程序。所以 Rails 是明确针对某领域的产品,但是这个领域很大也很重要。专攻此领域使 Rails 具有巨大的优势,引起巨大轰动。通过专注于此领域的项目,Rails 的设计者可以选择一些其他框架不能或者不应该采用的捷径。这种专门化往往为简单性而失去灵活性。

基于Web的应用程序允许一组相似的优化。当您知道一个应用程序是基于Web的,您就能知道应用程序的大体结构和可能需要的主要组件。因为Rails关注的是基于Web的应用程序,所以在 Rails 中增强了以下功能:

◆模型-视图-控制器:Rails的MVC框架(称为 Action Pack)为基于 Web 的访问进行了定制并且实现了著名的被称为Model 2的设计策略。Rails版本已经优化了控制器和视图之间的集成(该集成能够使配置文件最小化)并且自动使控制器实例变量可供视图使用。

◆项目目录结构:所有 Rails 应用程序都具有相同的项目结构,其中的目录用于存储应用程序代码、数据库配置、公共的静态文件,以及用于管理Web服务器和进行基于Web的功能测试的脚本。

◆架构:通过提供用于生成应用程序组件(这些组件都符合普通架构目标,比如页面级和片段级缓存;两层设计;用于测试、开发和生产的环境)的开箱即用脚本,Rails框架简化了架构。

◆工具:Rails 工具专门用于 Web。日志支持、breakpointer、剖析器(profiler)和测试框架都针对基于Web的应用程序进行了修剪并针对两层操作而被启用。但是钉子枪永远不会取代锤子,我们却愚蠢地希望能完全取代。锤子总能做一些钉子枪不能做的事情。Rails将永远不会成为用于企业集成、对象关系映射或全堆栈 Web 服务的工具。您可以对 Rails 所做的最好期望是,它是能很好满足它所针对领域的专门工具。

在时光的激流中,我们总会长大。

解读Ruby on Rails的成功秘籍(1)

相关文章:

你感兴趣的文章:

标签云: