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. VisualStudio: 窗口背景颜色设置成黑色

    Tools>Options>Environment>General >Color theme

  2. Python: re.compile最短匹配模式,只取双引号内的值\“

    用正则表达式匹配某个文本模式 1.只取双引号内的值 2.长短匹配模式对比 贪婪模式:     模式r'\"(.*)\" '的意图是匹配被双引号包含的文本,但是这个表达式中*是贪婪的 ...

  3. $.ajax({ }) 里面的success函数不执行 | 回调函数返回的值 用对象,下标,键值对访问不到时

    原因一般是  dataType:'json' 数据类型设置成了json  ,去掉这个设置即可 $.ajax({ }) 回调函数返回的值 用对象,下标,键值对访问不到时,考虑是否返回数据为字符串 考虑是 ...

  4. python之路----网络编程--黏包

    黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) res=subprocess.Popen(cmd.decode('utf-8'), shell ...

  5. Java高并发高性能分布式框架从无到有微服务架构设计

    微服务架构模式(Microservice Architect Pattern).近两年在服务的疯狂增长与云计算技术的进步,让微服务架构受到重点关注 微服务架构是一种架构模式,它提倡将单一应用程序划分成 ...

  6. JavaScript 获取和修改 内联样式

    JavaScript 获取和修改 内联样式 版权声明:未经授权,严禁转载分享! 元素的样式 HTML 元素的 style 属性返回一个 CSSStyleDeclaration 类型的对象. Style ...

  7. 20145104张家明 《Java程序设计》第8周学习总结

    20145104张家明 <Java程序设计>第8周学习总结 教材学习内容总结 第15章 -java.util.logging包提供了日志功能相关类与接口,不必额外配置日志组件,就可以在标准 ...

  8. exp9《网络对抗》web安全基础实践201453331魏澍琛

    201453331魏澍琛web安全基础实践 一.实验过程 1.webgoat开启 2.Injection Flaws练习 Command Injection 原网页中没有注入的地方,那就用burpsu ...

  9. python3+pyqt5 +eric5安装配置

    一.大纲内容: 1.预备PC环境: 2.预备安装程序: 2.1.下载Python3.2 2.2.下载PyQt4 2.3.下载Eric5 3.安装配置步骤: 3.1.安装Pyhon3.2 3.2.安装P ...

  10. 2016年蓝桥杯B组C/C++省赛(预选赛)题目解析

    2016年蓝桥杯B组C/C++ 点击查看2016年蓝桥杯B组省赛试题(无答案版) 第一题:煤球数目 题解 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个( ...