• 《Agile Web Development With Rails》读后感--rails基于web设计的best Practices


    最近看完《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开发上少走很多弯路。

  • 相关阅读:
    JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换
    JavaScript的工作原理:解析、抽象语法树(AST)+ 提升编译速度5个技巧
    如何保证MongoDB的安全性?
    SQLSERVER 中sp_who, sp_who2和sp_who3(转载)
    exec sp_spaceused如何只返回一个结果集(转载)
    c#静态构造函数 与 构造函数 你是否还记得?(转载)
    如何让.NET Core支持GB2312和GBK
    C#中用HttpWebRequest中发送GET/HTTP/HTTPS请求 (转载)
    ASP.NET Core读取AppSettings (转载)
    使用自定义端口连接SQL Server的方法(转载)
  • 原文地址:https://www.cnblogs.com/kingzzm/p/3321749.html
Copyright © 2020-2023  润新知