最近看完《Agile Web Development with Rails》一书,受益匪浅。书中先是用一个简单的web应用带你进入Rails的世界,然后在你大致熟悉之后,再带你了解Rails的一些细节,比如ActiveRecord,ActiveController等。最让我觉得Rails美的是其中的一些best practices,这些都可以很好地借鉴到平时的开发中去。下面我简单举几个在Rails中我认为比较好的一些best practies。

数据库迁移

在Rails中,SQL脚本可以通过命令来生成,生成的脚本以时间戳加意图命名,比如创建表的SQL脚本文件可能是“20120529151027_create_products.rb”,加时间戳可以让人一眼就知道脚本的执行顺序,实际上Rails在也是根据时间戳来执行脚本的。创建完脚本后只要简单的执行”rake db:migrate”命令即可完成脚本的执行,在Rails中会有脚本执行的记录,已经执行过的脚本不会重复执行。另外,在每个SQL脚本中,不仅有执行的操作,还有回滚的操作。比如:

demo.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class AddPriceToLineItem < ActiveRecord::Migration
def self.up
  add_column :line_items, :price, :decimal, :precision => 8, :scale => 2, :default => 0   say_with_time "Updating prices..." do
  LineItem.find(:all).each do |lineitem|
  lineitem.update_attribute :price, lineitem.product.price
end
  end
 end def self.down
  remove_column :line_items, :price
end
end

这里的up方法是正常执行时的操作,down方法则是回滚时所做的操作。如果发现执行的脚本有问题,简单地执行“rake db:rollback”即可回退到脚本执行前的状态。

Convention over Configuration

在上面创建的脚本中可以看到,Rails的表名都是复数形式,因为Rails认为每张表都会存放很多个同一类型的数据,因此是复数,这种清晰的命名规范不仅体现在数据库,还有其他很多地方。比如,model的文件名都是单数形式存在,controller都是以复数形式存在。Rails将MVC各模块连接起来就是通过COC约定,举个简单例子,product的model文件是product.rb,controller文件是products_controller.rb,而view文件则是放在对应的product文件夹里面,每个view文件名以action方法名开头,这样在写代码的时候就可以不用具体指定要发送给哪个controller,给哪个model存储数据,让哪个页面显示数据,只要你遵守了COC约定,Rails会帮你跳转到最合适的地方。

分层的页面布局

在书中的例子,作者会建议你将页面分成一个个小的局部文件。实际上Rails也是推荐你这么做的,局部文件只需以下划线开头,Rails就会帮你识别出来。小的页面文件结构简单,容易维护,比如有显示列标题的页面,其中嵌套显示具体行内容的页面,其中再嵌套分页页面文件。对比平时在工作里遇到的一个个硕大无比的jsp文件,rails的页面文件让人有了进入世外桃源的感觉。

Rails还有其他很多的best practices,这里只是简单的介绍。Rails框架集中了很多开发中遇到的常见问题的解决方案,而且是一些最佳的解决方案,像集中了很多经验丰富的大师智慧一样,使用Rails并学习其中的best practices,能让你在web开发上少走很多弯路。

《Agile Web Development With Rails》读后感--rails基于web设计的best Practices的更多相关文章

  1. 谈敏捷,谈开发 --《Agile Software Development》读后感

    谈敏捷,谈开发 --<Agile Software Development>读后感 北航计算机学院 110616班 11061171 毛宇 联系方式:maoyu815930@sina.co ...

  2. [Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

    本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(Paa ...

  3. win8平台下Ruby on Rails的第一个web应用

    最近在做一个网站web前端的前期开发,老板要求用Ruby on Rails搭建部署开发环境,上网搜之,发现整个搭建流程比较坑爹,于是用了一款集成软件Bitnami Ruby Stack一键安装到我的w ...

  4. BEGINNING SHAREPOINT&#174; 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第3章节--SharePoint 2013 开发者工具 SharePoint中基于Web开发         之前提到过, ...

  5. Eclipse Che:下一代基于 Web 的 IDE

    即使对于熟练的开发人员,想要去为一个项目贡献代码,正确的安装和配置一个集成开发环境.工作区 workspace和构建工具,都是一个十分艰难和浪费时间的任务.Codenvy 的CEO,Tyler Jew ...

  6. Full Stack Web Development

    Full Stack Web Development Web Stacks MEAN (Mongo, Express, Angular and Node) LAMP (Linux, Apache, M ...

  7. Learning web development with MDN

    Learning web development with MDN Server-side website programming Dynamic Websites – Server-side pro ...

  8. 敏捷软件开发 Agile software Development(转)

    原文链接: http://www.cnblogs.com/kkun/archive/2011/07/06/2099253.html 敏捷软件开发 Agile software Development ...

  9. 敏捷软件工程(agile software development) VS传统软件工程(traditional software development)

    敏捷软件工程(agile software development) VS传统软件工程(traditional software development)      Agile principle  ...

随机推荐

  1. scrapy之定制命令

    单爬虫运行 import sys from scrapy.cmdline import execute if __name__ == '__main__': execute(["scrapy ...

  2. Selenium之IE浏览器的启动问题及解决

    前面有篇文章说到启动IE浏览器时,会出现以下错误提示: 浏览器启动之后,页面不会自动输入代码设置的地址,如下图展示 查看报错语句,发现原来是浏览器比例调的不正确,修改浏览器比例为100%即可解决该问题

  3. 认识与设计Serverless(二)

    一.设计Serverless的功能模块 第一节讲了Serverless一些概念与特性,废话居多,概念的东西了解过后要有设计与构思,才能学到精髓,一个Serverless平台的形成,涉及到很多模块的架构 ...

  4. java基础知识面试题(1-40)

    1.面向对象的特征有哪些方面?答:面向对象的特征主要有以下几个方面:- 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面.抽象只关注对象有哪些属性和行为,并不关注这些 ...

  5. Smarty模板变量调节器

    Smarty模板变量调节器用法 在smarty里面,怎么修饰文本和变量呢?当然,你可以通过php函数处理文本,然后再通过assign()方法分配到模板,其实smarty提供了变量调节器能够很容易的处理 ...

  6. Spring整合Mybatis 之分页插件使用

    [分页插件项目中的正式代码一共有个5个Java文件,这5个文件的说明如下] Page<E>[必须]:分页参数类,该类继承ArrayList,虽然分页查询返回的结果实际类型是Page< ...

  7. KEYENCE Programming Contest 2019 Solution

    A - Beginning 签到. #include <bits/stdc++.h> using namespace std; int main() { ]; while (scanf(& ...

  8. MySQL从删库到跑路(一)——MySQL数据库简介

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.MySQL简介 1.MySQL简介 MySQL是一个轻量级关系型数据库管理系统,由瑞典MySQL AB公司开发, ...

  9. AI学习资料

    OpenAI Gym介绍 http://m.blog.csdn.net/u010510350/article/details/71450232

  10. jmeter导入csv压测

    压测csv数据源(设置为utf-8格式),jmeter不需要第一行参数名 新建一个线程组,根据压测数据调整设置需要的循环次数(测试数据有9行,设置循环次数为9) 添加http头信息 Content-T ...