用Rails创建高质量Web应用 - 编程入门网
用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里面,我们真正想关心的只是Album的创建,而不是Photo或其它关联对象的创建。而且从Album的角度看,创建过程中photo跟其它attributes没有区别,应该得到一致地处理。 Rails 2.3之后,我们就可以很简单地达到这个目的。在Album里面做这样的声明:
然后,controller中的代码就可以被简化为:
从这个例子中可以看到Rails在推进MVC三部分之间职责明确上所做的努力和进步。很多人可能会说,我们的代码没有这样的问题。但MVC三部分之间职责开始模糊,往往出现在业务逻辑变得复杂之后。我们应该经常审视我们的代码,做到真正的职责单一。 用Rails创建高质量Web应用(2)时间:2011-07-06 infoq 胡振波REST 现今的互联网应用已经很难是一个独立的个体,互联网应用之间的交互越来越多。所以,建立REST架构风格的互联网应用变得越来越重要。Rails的 router很好地支持了REST风格的外部接口设计。Rails 3所做的一个很大改进就是router的改进,以强调REST风格的接口设计。 REST也让我们以资源的角度看待应用中的数据,我们的代码设计因此也产生了一些变化。当需要增加一个invoice的PDF文件下载功能的时候,我们一般会向InvoicesController添加这么一段代码:
这段代码至少存在两个问题:第一个问题,就是我们前面所述的职责明确问题。PDF的generate属于Invoice而不是controller 的职责,所以我们应该把PDF生成的逻辑移到Invoice内部。第二个问题,则是语义是否恰当的问题 。如果我们以资源的角度看待Invoice的 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |