快速业务通道

用Rails创建高质量Web应用 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

用Rails创建高质量Web应用

时间:2011-07-06 infoq 胡振波

越来越多的企业开始选择Rails作为Web应用的框架。Rails曾经还主要是一些轻公司的选择,但今天一些“重”企业(比如保险、金融等行业的企业)也开始把Rails纳入内部应用甚至外部应用的考虑范围。我最近服务过的客户是国外某大型保险公司,该公司就选择了Rails来创建他们的保险销售网站。

选择Rails的原因,是因为它快速构建的能力,是因为它是Web开发的DSL。但是否选择了Rails就代表了高效开发?是否在Rails上创建的Web应用就一定是高质量的?答案是否定的。从我参与过的几个Rails项目来看,质量可谓是参差不齐,开发速度也是判若云泥。而开发的效率低下的原因,则常常是应用本身质量的低下和设计的拙劣。

在本文中,我将逐一讨论几个影响Web应用质量的因素。同时,我们也可以从中领悟到Rails为创建高质量的Web应用所做的努力、它的各种设计给我们的启示,以及Rails 3的改进所代表的意义和趋势。

MVC

我们都知道Rails是一个MVC架构模式的Web框架,MVC各部分的职责也很清楚。但问题在于我们是否真的遵循了MVC架构模式做到了各部分职责的明确分离?是否遵循了单一职责的原则?

在大多数代码里面,这种混沌不清的状态存在于model和controller之间:controller承担了太多本应由model承担的职责。其中比较典型的例子是内嵌(多)对象表单。比如,Album和Photo之间是一对多的关系,我们要创建一个含有多个photo的album。在 Rails 2.3之前,我们可能会写出类似的代码:

AlbumsController   def create    album = Album.new params[:album]    album.photos << Photo.new params[:album][:photo]    ...

如果是一个涉及更多种类型对象的表单,这里的代码可能会更加复杂。但在AlbumsController里面,我们真正想关心的只是Album的创建,而不是Photo或其它关联对象的创建。而且从Album的角度看,创建过程中photo跟其它attributes没有区别,应该得到一致地处理。

Rails 2.3之后,我们就可以很简单地达到这个目的。在Album里面做这样的声明:

class Album < ActiveRecord::Base   ...   accepts_nested_attributes_for :photos end 

然后,controller中的代码就可以被简化为:

AlbumsController   def create    album = Album.new params[:album]    ...

从这个例子中可以看到Rails在推进MVC三部分之间职责明确上所做的努力和进步。很多人可能会说,我们的代码没有这样的问题。但MVC三部分之间职责开始模糊,往往出现在业务逻辑变得复杂之后。我们应该经常审视我们的代码,做到真正的职责单一。

用Rails创建高质量Web应用(2)

时间:2011-07-06 infoq 胡振波

REST

现今的互联网应用已经很难是一个独立的个体,互联网应用之间的交互越来越多。所以,建立REST架构风格的互联网应用变得越来越重要。Rails的 router很好地支持了REST风格的外部接口设计。Rails 3所做的一个很大改进就是router的改进,以强调REST风格的接口设计。

REST也让我们以资源的角度看待应用中的数据,我们的代码设计因此也产生了一些变化。当需要增加一个invoice的PDF文件下载功能的时候,我们一般会向InvoicesController添加这么一段代码:

InvoicesController   def download_pdf    ...    send_data(generate_pdf(@invoice), :type => ''application/pdf'')   end

这段代码至少存在两个问题:第一个问题,就是我们前面所述的职责明确问题。PDF的generate属于Invoice而不是controller 的职责,所以我们应该把PDF生成的逻辑移到Invoice内部。第二个问题,则是语义是否恰当的问题 。如果我们以资源的角度看待Invoice的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号