最近看完《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. 深入理解flannel

    1 概述 根据官网的描述,flannel是一个专为kubernetes定制的三层网络解决方案.它主要用于解决容器的跨主机通信问题.首先我们来简单看一下,它是如何工作的. 首先,flannel会利用Ku ...

  2. 迅雷7 纯净版v7.9.18.4724

    http://soft2.xzstatic.com/2016/08/Thunder_7.9.13.4666_NoAD_VIP.exe http://www.downza.cn/soft/192064. ...

  3. maven+springboot项目使用idea打包

    首先简单了解一下maven: 概述 日常开发中,我们用到的maven相关功能大概以下几种: 1. 管理jar依赖 2. 构建项目(打包.编译等) 3. 发布项目(共享.上传至服务器,供他人使用) 简单 ...

  4. 在Qt中如何编写插件,加载插件和卸载插件(转)

    Qt提供了一个类QPluginLoader来加载静态库和动态库,在Qt中,Qt把动态库和静态库都看成是一个插件,使用QPluginLoader来加载和卸载这些库.由于在开发项目的过程中,要开发一套插件 ...

  5. QT之QML控件篇

    QT quick中提供了很多的实用控件widget,下面介绍几种常用的. 这部分介绍基本是参照QtCretator提供的帮助文档,一定要学会使用,不明白的去查找帮助. Item 基本上所有的可是控件的 ...

  6. iframe 跨域问题解决方案 利用window.name+iframe跨域获取数据详解

    详解 前文提到用jsonp的方式来跨域获取数据,本文为大家介绍下如何利用window.name+iframe跨域获取数据. 首先我们要简单了解下window.name和iframe的相关知识.ifra ...

  7. zoj3696Alien's Organ (二项分布,泊松分布求近似值)

    /*二项分布即重复n次的伯努利试验,每次发生的概率一样,假设成功的概率是p,那么失败的概率就是1-p: 二项分布的概率公式:试验中发生K次的概率是 P(ξ=K)= C(n,k) * p^k * (1- ...

  8. LoRa无线通信设计(一)原理

    LoRa无线通信设计(一)原理 引言 1901年,古列尔默.马可尼把长波无线电信号从Cornwall(康沃尔,位于英国的西南部)跨过大西洋传送到3200公里之外的Newfoundland(加拿大的纽芬 ...

  9. 【小坑】java下载excel文件

    excel文件的导入导出是很常见的功能,这次做了个下载的功能,踩了一些坑,记下来避免以后重复踩…… 1.inputstream序列化问题 Could not write JSON document: ...

  10. Django:表结构发生变化需要执行命令

    Django:表结构发生变化需要执行命令 Django:表结构发生变化需要执行命令 mysite> python manage.py makemigrations blog #让 Django ...