最近看完《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. docker网络部分源码分析

    daemon初始化network controller daemon的配置,网络部分的内容在cmd/dockerd/config_common_unix.go中指定,默认设置一般都为空 // daem ...

  2. 安装Ruby、Sass在WebStrom添加Watcher实现编辑scss文件时自动生成.map和压缩后的.css文件

    前言 这段时间一直在看Bootstrap,V3官方直接提供了Less版本的源码,就先将Less学完了,很简单的语法,学习写Demo都是在Webstorm里写的,配置了Watcher自动编译(详见< ...

  3. 第一课:初识Hadoop

    Hadoop核心组件之分布式文件系统HDFS: 特点:扩充性,容错性,海量数据存储. 在HDFS中每次上传文件,都会将文件切分成指定大小的数据块(默认128m)并以多副本的存储在多个机器上. 数据切分 ...

  4. IScroll5中文API整理,用法与参考

    IScroll是移动页面上被使用的一款仿系统滚动插件.IScroll5相对于之前的IScroll4改进了许多,使得大家可以更方便的定制所需的功能了. 做项目的时候正好用到了这个插件,自己做了一下总结, ...

  5. Linux下编译安装PHP扩展redis

    [Redis] 先安装tcl: yum install tcl [下载和安装] 官网http://redis.io/  下载最新的稳定版本,这里是3.2.0, 然后解压文件并进入. $ sudo ta ...

  6. Kconfig文件说明2

    Konfig详解: 当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是 ...

  7. malloc calloc realloc 区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...

  8. Js中的filter()方法

    /* filter()方法使用指定的函数测试所有元素,并创建一个包含所有通过测试的元素的新数组. filter()基本语法: arr.filter(callback[, thisArg]) filte ...

  9. php \r \n 和 <br/> \t

    利用\r \n 和 <br/> \t做了个实验,话不多说,看代码就很清楚的知道

  10. vim7.4在Win8下的安装及简单配置

    软件环境 vim74 git vim中文帮助 vundle安装——插件管理软件 cd vim所在路径/vimfiles/bundle git clone https://github.com/gmar ...