级别: 初级 James Schementi, 硕士研究生, Worcester Polytechnic Institute
2007 年 1 月 15 日 本文来自于 Rational Edge:一篇非常好的书评,本书介绍了 Ruby on Rails 程序设计人员解决普遍的 Rails 问题的大型子集的解决方案。
作者 Chad Fowler Pragmatic Programmers,2006 年出版 Facets of Ruby 系列 ISBN: 0977616606 平装本:332 页
程序设计人员曾经听说过软件开发与烹调食物的类比,并且他们可能已经用这样的比较来对其他人解释什么是程序设计。关于这两种规程都有数不尽的出版物,但出于某种原因,“食谱”只属于烹调技术。
食谱的目的是令厨师的生活更轻松,因此,食谱为读者提供了如何制作食物一步步的指导。Rails Recipes 是利用该思想向 Ruby on Rails 程序设计人员提供的不同种类的软件书籍,而不是教授概念,并展示那些概念的小实例,它为普遍的 Rails 问题的大型子集提供解决方案。有了针对 Web 应用程序每个部分的 70 个质量处方,本书对于任何 Ruby on Rails 开发人员都应该是很好的武器。
当您需要时,找到 Recipes
像所有好的食谱一样,Rails Recipes 提供各种主题的不同处方集,例如用户界面、控制器、数据库、测试、蓝图和电子邮件。它也将标签分配给每个处方,以确定该处方涵盖什么内容。例如,标题为“Creating a Drag-and-Drop Sortable List”的处方在 User Interface 部分,并且标签为“Ajax”和“HTML”。然而处方不再超过十页,有一些甚至更短,并且通常解释那些拥有“为什么我没想到”解决方案的棘手问题。那些处方被亲切地称为“Snacks(小提示)”,并且分散在书中各处,让您“停留”在处方之间。
该书分为六个部分,我将在下面进行讨论。
部分 I —— 用户界面
该书第一部分介绍了用户界面,并且马上展示了如何解决相当复杂的问题,如适当的表单编辑、拖拽列表,及动态图的处方。当我撰写本书评的时候,我把书放在桌子边,当在脑海中时常出现“我究竟该怎么做”的时刻,我想到的第一个处方是适当地编辑处方。它向我提供非常明了的实现过程,并且带着我经历编码,因此我真正地了解了我放进应用程序中的内容是什么。而且,由于适当的编辑只对文本框有效,那么我下一个问题就是 —— “对下拉框我能怎么做?”—— 这个问题在下一个处方中得到了回答!这种类型的思维过程的组织在整本书中都能找到,这是非常节省时间的做法。而且,我还找到了“Smart Pluralization”,它解决了一个古老的问题,就是在前缀 0,1,2 等等(举例来说,1 comment,2 comments)时,显示一个词正确的复数形式。如果不是有了这种简单的提示,我的显示代码仍旧充满了条件语句,以打印正确的单词,而像这样的小提示使得Rails Recipes 感觉很优雅。
部分 II —— 数据库
Rails 提供 Active Record,这是允许在 Ruby 中进行所有的数据库交互的强大的数据库抽象。Active Record 的日常使用如此简单,以至于使用 Rails API 可以代替到一个中等长度页面代码片断。Rails Recipes 回答了那些更难的问题,像“如果有多个数据库怎么办?”或者“如果我不用数据库怎么办?”或者“我怎样支持取消?”它还提供一个处方,用来支持应用程序中的“标记”,这是我肯定用到的。并且,非常有用的,并且说服我将 Ruby 作为“程序设计实用保护带”的小提示是“Use Active Record Outside of Rails。”尽管只有一页长,它还是展示了,在 Web 之外如何使用 Rails,并且展示了为什么您不需要再写 SQL 了。
部分 III —— 控制器(Controller)
大多数,即使不是所有的,应用程序的逻辑都应该在控制器中:每个 Rails 应用程序中收集应用程序所需的数据,且提供透视图的部分。大多数 Web 站点所需的更普遍的逻辑之一是用户登录,并在其登录之后验证用户。在战略上,它是部分 III 的第一个处方。而这不是我们在 PHP 时代在线找到的简单陈旧的验证代码,该处方使用经过处理的密码并通过 SHA2 加密,甚至向我们提供了用于登录的简单界面。在完成了该处方之后,下一个建立在它之上,并且展示如何验证用户角色,并且以五个页面的容量,描述了我们如何能够通过 Role/Right 用户系统限制用户行为。非常酷!
大型 Web 应用程序中的重要问题是会话信息的存储。大多数服务器和框架将会话存储在文件系统中,但可扩展的、生产系统的方法将会话存储在数据库中。这对大多数系统来说通常令人畏缩,但 Rails 使其非常简单,并且Rails Recipes 将其作为小提示进行介绍!
现今,应用程序中另一个必备的事情是有意义的 URL,Rails Recipes 向我们概括了 Action Controller 有力的 Routes 框架,以及如何将它用于一些最普遍的干净的 URL 方案。该部分还向您展示了如何使用 Postback 操作,如何处理 CSV 渲染,以及如何利用 Ruby 的代码生成特性创建可复用的控制器代码。
虽然这是其中一个最短的部分,但是它确实包含了最多的内容。
部分 IV —— 测试
Rails 给我们提供了建立在应用程序中的测试框架,并使单元或功能测试的撰写,甚至是测试先行的开发非常容易。大多数测试框架要求开发人员在处理数据的时候需要完成一些繁重的任务,而无论在测试中使用 SQL 进行描述,还是将数据从数据存储中获取出来。Rails 允许我们通过 Fixtures 管理测试数据,本部分中的第一个处方是如何利用 ERb(内嵌的 Ruby)(与视图利用的同样的模板引擎)撰写动态的设备。该处方节省了我在最近项目中的许多时间。
本部分中其他的处方展示了如何将数据库的数据加载到您的设备中,如何利用集成测试跨控制器进行测试,以及如何测试您的助手类。这里没有很多关于利用 Rails 测试框架进行更高级工作的信息,因此在您开始学习撰写那些测试时,该部分极其有益。
部分 V —— 蓝图
如果您认为书中此部分的命名很模糊,我完全同意您的看法。它似乎应该命名为“处方:我们不知道应该将程序放在哪里”,或者应该分解到其他部分中,像“部署”,“部署过程”等等。这是书中最大的部分,因此,我确信将其分开并无大碍。
尽管这些处方的分类很古怪,但它们确实解决了一些重要的问题。在过去的一个月里我所使用的一些处方是关于创建生成器(例如,“脚本或生成模型”是生成器)、定制的搜索(rake)任务,及 Rails 插件。Rails 生成器和插件对代码复用产生了奇迹,并且非常棒的是,Rails Recipes 涵盖了这些主题。搜索,提供了将重复性任务自动化的处方,在此处以非常简单的方式进行阐述,这改变了我关于使用它的想法。
该部分还提供了一些处方,测试您的代码基础集成,异常通知、RSS 聚合, 图像上载、生成文档、定位及时区支持,和其他的。(看到我所谓的关于该主题的七零八落的内容了吧?)
部分 VI —— 电子邮件
该部分也有点混乱,由于这部分太短了,并且与蓝图部分中的处方有些脱节,但无论如何,该部分阐述了您应该如何在 Rails 应用程序中处理电子邮件的内容。在我知道这部分中包含该主题之前,我已经在 Rails 中实现了一个系统,发送电子邮件通知,这个材料使这件事非常简单!
该部分特别介绍了,如何发送富格式的电子邮件,如果有必要,退化为纯文本,带附件发送,测试收到的电子邮件,并处理回复邮件。当然,在任何适度规模的 Web 应用程序中,您不可避免地需要向您的用户发送电子邮件,而当这个时候来临时,这些处方就是很好的参考。
总结
虽然该书可以更好地进行组织,以帮助我们找到信息,但是该书的内容是稀有的。本书的内容来自于 Rails 专家和 Rails 开发人员的实际经验,因此您不可能获得比本书更好的信息来源了。我推荐每个 Rails 开发人员都收藏此书,即使不总放在桌子上。该书有希望为其他作者“点亮明灯”,让其他作者看到以“处方”的形式组织内容的书籍的价值,以便在不久的将来,我们能够看到更多此种类型的书籍,在我们需要时,给予我们所需的答案。
参考资料
关于作者  | 
|  | James Schementi 是麻萨诸塞州伍斯特工学院的硕士研究生,他的研究领域包括动态语言、Web 框架和用户界面设计。他的 Web 站点是 http://users.wpi.edu/~jimsch06,您可以通过 jimsch06@wpi.edu 联系他。 |
对本文的评价
|