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. python 同时迭代多个序列

    每次分别从一个序列中取一个元素 >>> xpts = [1, 5, 4, 2, 10, 7] >>> ypts = [101, 78, 37, 15, 62, 99 ...

  2. python实现常量const

    新建const.py: #-*-coding:UTF-8-*- #Filename: const.py # 定义一个常量类实现常量的功能 # # 该类定义了一个方法__setattr()__,和一个异 ...

  3. python服务器端、客户端的模型,客服端发送请求,服务端进行响应(web.py)

    服务器端.客户端的模型,客服端发送的请求,服务端的响应 相当于启动了一个web server install web.py 接口框架用到的包 http://webpy.org/tutorial3.zh ...

  4. 【转】svn http://提示svn: Unrecognized URL scheme错误

    转自:http://blog.csdn.net/l241002209/article/details/8547943 SVN这个东西虽然不好用(当然也是因为自身没有重视,但是谁让GIT这么好用呢…!) ...

  5. leetcode_目录

    3Sum Closest 3Sum 4Sum Add Binary Add Two Numbers Anagrams Balanced Binary Tree Best Time to Buy and ...

  6. Linux中Postfix邮件安装Maildrop(八)

    Postfix使用maildrop投递邮件 Maildrop是本地邮件投递代理(MDA), 支持过滤(/etc/maildroprc).投递和磁盘限额(Quota)功能. Maildrop是一个使用C ...

  7. java输出重定向

    Java的标准输入,输出分别是通过System.in和System.out来代表.默认情况下他们分别代表键盘和显示器. System类里提供了3个重定向标准输入,输出的方法. static void ...

  8. MySQL Crash Course #20# Chapter 28. Managing Security

    限制用户的操作权限并不是怕有人恶意搞破坏,而是为了减少失误操作的可能性. 详细文档:https://dev.mysql.com/doc/refman/8.0/en/user-account-manag ...

  9. Web负载均衡学习笔记之四层和七层负载均衡的区别

    0x00 简介 简单理解四层和七层负载均衡: ① 所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. ...

  10. 关于Session的概念和测试点

    Session概要 Session 是用于保持状态的基于 Web 服务器的方法,在 Web 服务器上保持用户的状态信息供在任何时间从任何页访问. Session 允许通过将对象存储在 Web 服务器的 ...