include 模块和 extend 模块的不同:
 
Class Extension: 通过向singleton class中加入Module来定义class method,是对象扩展的一个特例。
(因为类是特殊的对象。)

例子:

class C; end
 
module M
  def my_method
    'a class method'
  end
end
#用extend方法: class C; extend M; end
class << C
  include M
end
 
p C.my_method   #=> "a class method"

Model和controller.

  • 如果 Model 超过 3 个 PageDown(3个屏幕页面放不下),拆 Module
  • model可以include进class(增加实例方法),  类可以extend model(增加类方法。)。
  • 一个Controller的action如果超过15行,太fat,就应当重构。
  • 如果 Controller 每个 action 都有重复的code,使用 before_action
  • 如果多个 Controller 有同样的少样几行 action,如 Admin,考虑用 继承inheritance

helper的使用:
 

Tips 1 : 预先封装会重复写很多次,需要改格式的栏位

标题,图片,按钮(连接),叙述。
例子:
app/helpers/orders_helper.rb

  def render_order_created_time(order)
order.created_at.to_s(:short)
end

这样如果以后全站的订单时间格式需要改,那么只要改一处就行了。

 

Tips 2: 不要 HTML 与 Ruby 混杂写 View

 尽量都用 Helper 输出逻辑判断类的代码。

小结,需要使用helper的地方:

  • HTML 与Ruby 高度混杂
  • 该段程式码有很多 if / else
  • 该段程式码衣服穿很多层 simple_format(truncate(auto_link(@post.content), :length => 30) )
 注意:不要过度使用helper
  • content_tag标签用了2个以上。
  • 有纯html代码
  • 有html_safe方法

以上情况可以用partial提炼。

使用 Partial 的原则

  • 如果 View 超过 2.5 个 PageDown 请拆 Partial
  • 如果元件需要被复用,也是拆 Partial
  • 特殊元件可拆 partial
  • 登入 / 登出 navbar
  • Google Analytics
 
code climate测试app的代码得分(重构) https://codeclimate.com/
 
 

 关于Controller的重构:
 
1. 善用Model scope,对query SQL可以在model层中使用scope定义好它,在controller内直接调用。
 
2. 用association method build()新建关联对象。
  def create
@post = current_user.posts.build(params[:post])
@post.save
end
 
3.model虚拟属性:
利用在model对某个名字定义一套存取方法,操作没有在数据库中存在的字段,曾为虚拟属性。
class User < ActiveRecord::Base
def full_name
[first_name, last_name].join(' ')
end def full_name=(name)
split = name.split(' ', 2)
self.first_name = split.first
self.last_name = split.last
end
end

在view中:
#当表格提交时调用了full_name=(XXX)方法,然后得到了first_name和last_name两个参数。
<% form_for @user do |f| %>
<%= f.text_field :full_name %>
<% end %>
在controller												

重构 MVC; 代码分享工具(重构,改进,打分)的更多相关文章

  1. 代码管理工具 Git

    之前一直使用微软的代码管理工具TFS(Team Foundation Server)..NET CORE 2.0的发布后,考虑到.NET CORE项目可以跨平台,准备把项目迁移到.NET CORE 环 ...

  2. 重构MVC多条件分页解决方案

    重构MVC多条件+分页解决方案 为支持MVC的验证,无刷新查询,EF,以及让代码可读性更强一点,所以就重构了下原来的解决方案. 这里就简单讲下使用方法吧: Model: 继承PagerBase:  S ...

  3. 高效重构 C++ 代码

    引言 Martin Fowler的<重构:改善既有代码的设计>一书从2003年问世至今已有十几年时间了,按照计算机领域日新月异的变化速度,重构已经算是一门陈旧的技术了.但是陈旧并不代表不重 ...

  4. JS代码的简单重构与优化

    JS代码的简单重构与优化(适合新手) 原文  http://www.cnblogs.com/similar/p/5016424.html Demo . 1 //bad if (age > 20) ...

  5. AIDE支持实时错误检查、代码重构、代码智能导航、生成APK

    AIDE是一个Android Java集成开发环境,可以在Android系统内进行Android软件和游戏的开发.它不仅仅是一个编辑器,而是支持编写-编译-调试运行整个周期,开发人员可以在Androi ...

  6. JAVAEE——BOS物流项目05:OCUpload、POI、pinyin4J、重构分页代码、分区添加、combobox

    1 学习计划 1.实现区域导入功能 n OCUpload一键上传插件使用 n 将文件上传到Action n POI简介 n 使用POI解析Excel文件 n 完成数据库操作 n 使用pinyin4J生 ...

  7. 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...

  8. 重构现有代码:Refactoring

    重构现有代码:Refactoring 1.WHY SHOULD WE REFACTOR? 1.Refactoring Improves the Design of Software Without r ...

  9. JetBrains公司介绍(Java、Python、PHP、Ruby、前端和代码测试与重构的IDE)

    JetBrains JetBrains是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是Java编程语言开发撰写时所用的集成开 ...

随机推荐

  1. Ignite缓存大小管理

    Ignite使用计算机内存存储缓存数据,达到提升缓存读写性能的.但是计算机内存往往是有限的,我们必须合理管理Ignite对内存的使用. Ignite可以使用JVM堆外内存和堆内内存.使用堆外内存基本上 ...

  2. 2018-2019-2 20165209 《网络对抗技术》Exp4:恶意代码分析

    2018-2019-2 20165209 <网络对抗技术>Exp4:恶意代码分析 1 基础问题回答和实验内容 1.1基础问题回答 如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监 ...

  3. 2017-2018-2 20165207 实验四《Android开发基础》实验报告

    2017-2018-2 20165207 实验四<Android开发基础>实验报告 检查点1 安装测试Android Studio: 安装Android Studio 安装过程比较艰难,一 ...

  4. 在线js调试工具JSbin、jsFiddle

    在线js调试工具JSbin.jsFiddle JS Bin - Collaborative JavaScript Debugginghttp://jsbin.com/?html,output这个在线j ...

  5. jquery-easyui combobox combogrid 级联不可编辑实例

    jquery-easyui combobox combogrid 级联不可编辑实例 如何让jquery-easyui的combobox像select那样不可编辑?为combobox添加editable ...

  6. MySQL数据库----IDE工具介绍及数据备份

    一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...

  7. iperf3.0 hisi uclib 交叉编译

    1. 下载iperf src https://github.com/esnet/iperf/ 2.修改makefile.in 里面的配置. src/Makefile.in 613行 地方两行,去掉-p ...

  8. MySQL分区(Partition)功能

    引用地址:http://blog.csdn.net/tjcyjd/article/details/11194489 自5.1开始对分区(Partition)有支持 = 水平分区(根据列属性按行分)=举 ...

  9. 第八篇:支持向量机 (SVM)分类器原理分析与基本应用

    前言 支持向量机,也即SVM,号称分类算法,甚至机器学习界老大哥.其理论优美,发展相对完善,是非常受到推崇的算法. 本文将讲解的SVM基于一种最流行的实现 - 序列最小优化,也即SMO. 另外还将讲解 ...

  10. 20145333茹翔 Exp5 利用nmap扫描

    20145333茹翔 Exp5 利用nmap扫描 实验过程 首先使用命令创建一个msf所需的数据库 service postgresql start msfdb start 使用命令msfconsol ...