1 代码里的坏味道
0 重复代码
1 类太大
2 参数太多
3 发散型变化
比如:“嗯,每次得到一个新数据我都要修改这三个方法。“
4 霰弹型修改(平行继承体系)
每次对某类修改时,都要修改其他类
5 特性依赖
某个方法似乎更对另一个类(而不是本身所在的)类更感兴趣
6 数据泥团
有些数据总是同进同出
最基本原则就是把一起变化的东西放在一起
7 基本类型偏执
8 case 语句
试着使用多态
9 废弃代码,过度设计
10 临时字段
数据库里有些字段很少使用,某个实例变量只在特殊情况下使用
11 被拒绝的遗产
重构之前必须有测试
红灯/绿灯/重构
当你收到一份bug报告时,首先编写单元测试来暴露bug
编写不完整的测试也比没有测试好
思考可能会出错的边界条件,并集中测试它们
组织方法
1 使用查询替换临时变量
2 使用链式调用
3 引入解释性变量
4 分解临时变量
temp = 2 * (@height + @width)
puts temp
temp = @height + @width
puts temp
perimeter = 2 * (@height + @width)
puts perimeter
area = @height + @width
puts area
5 移除对参数的赋值
6 提炼环绕方法
有两个代码几乎一样的方法。唯一的区别是方法中间的一小段代码
7 引入类标注(动态方法定义)
8 引入命名参数
方法调用的参数无法轻易地从方法的名字中推断出来
1 命名全部参数
2 只命名可选参数
9 动态
1 使用动态方法定义替换动态接收器
2 隔离动态接收器
3 把计算从运行时移到解析时
在对象间移动特性
1 一个方法正在使用更多另一个类的特性而不是自身所在的类的特性
2 有一个类做了应该由两个类负担的工作
3 隐藏委托
使用对象的关键之一,就是封装。封装意味着减少对象系统对系统的其他部分所需的理解。这样当事情发生变化时,需要知道改变的东西就变少了
4 值对象和引用对象
5 使用符号常数代替魔法数字
6 封装集合
让它返回一份集合的拷贝,并提供添加和删除方法
一个类中常常会包含一个实例的集合。这个集合可能是个数组,也可能是个hash。集合应该采用一种和其他类型的数据略微不同的策略。读取器不应该返回集合对象本身,因为这样客户就能在拥有集合的类不知晓的情况下操作集合的内容
7 使用多态,模块扩展, 策略模式替换类型码
8 惰性初始化属性
简化方法调用
如果一个方法能经由其他途径获得作为参数传递进来的值,那么它就应该采用那种方法(而不是接受参数),过长的参数列表太难理解,我们应该尽可能缩减它的长度
1 重命名方法
记住你的代码是以人为本的,机器只是第二位
2 分离查询方法和修改方法(并发问题)
3 参数化方法 使用显式方法替换参数
4 保留完整对象
从一个方法中获取多个值,然后将它们作为参数传递给某个方法调用
5 引入参数对象
有一组总是一起出现的参数
6 移除设值方法
某个方法应该在创建的时候设置,然后不再变化
7 隐藏方法
8 使用工厂方法替换构造函数
工厂模式,抽象工厂模式
9 使用异常替换错误码
将正确的处理和对错误的处理分离开,使程序更容易理解
不要过度使用异常,有时候普通的检测就可以了
10 引入网关 引入表达式构造器
网关:用一种简化的方式来和某个外部系统或者资源的复杂api进行交互
表达式构造器:API通常在设计的时候都会为对象提供一组独立的方法。在理想状态下,这些方法都可以单独理解。这与一套流畅的和围绕一整个表达式的可读性设计的接口是背道而驰的。流畅的接口通常会让它的方法无法单独理解
表达式构造器在常规的api上额外提供了一层流畅的接口。它只有一个任务,就是提供流畅的接口,原来的对象可以保留那些能够让人单独理解的方法接口
http.post(:first_name, :last_name).to("www.google.com")
代理,适配器模式
其他:
1 使用模块替换抽象父类
一些父类永远不会实例化
2 构造模板方法
子类中有两个顺序相同,步骤类似的方法,但是步骤还是有区别的
def billable_amount
base = @units * @rate * 0.5
tax = base * Site::TAX_RATE
base + tax
end
def billable_amount
base = @units * @rate
tax = base * Site::TAX_RATE * 0.2
base + tax
end
def billable_amount
base_amount() + tax_amount()
end
3 使用守卫字句替换嵌套条件语句
分享到:
相关推荐
在Ruby编程语言的领域中,《重构 Ruby 版》是一本著名的参考书籍,该书由 Jay Fields、Shane Harvie 和 Martin Fowler 共同撰写,其中 Martin Fowler 是重构方面的权威专家。 书中详细介绍了重构的概念和技术,以及...
首先,文档的标题提到了“重构--Ruby完整扫描清晰版--中文”。这意味着文档可能是对软件重构领域权威书籍的翻译或解读版本,其中包含了对Ruby语言重构的具体讨论。重构,作为提升现有代码质量的一种实践,其目的是在...
《重构(Ruby版)》电子书。 本书的内容 本书是一本专门为职业Ruby程序员编写的重构指导。我们的目标是要向你展示怎样以一种受到严格控制同时又高效的方式来进行重构。你会学习到不在代码里引入bug并能按部就班地改进...
《Ruby重构:英文版》是Jay Fields、Shane Harvie和Martin Fowler等知名专家共同编写的,这本书专注于软件重构在Ruby编程语言中的应用。作为Addison-Wesley Professional Ruby系列的一部分,本书旨在为读者提供实用...
重构.pdf_电子版_pdf版 本资源主要讲解了软件设计中的重构(Refactoring)概念,并提供了一个实际案例来演示如何通过重构来改进代码结构。 什么是重构? 重构是软件设计中一种重要的技术,它的目的是为了使代码变...
本文将深入探讨Ruby中的关键技巧、重构方法以及遵循的代码风格指南。 一、Ruby技巧 1. 块和迭代器:Ruby中的块(blocks)和迭代器(iterators)是其强大之处。使用`each`、`map`等方法可以简洁地遍历集合。例如,`...
### 重构(Refactoring):改善现有代码的设计 #### 一、重构概念解析 重构(Refactoring)是一种软件工程中的重要技术,它指的是在不改变软件系统外部行为的前提下,通过改进其内部结构来提高代码质量的过程。重构...
《重构:改善既有代码的设计》是由马丁·福勒(Martin Fowler)所著的一本经典IT著作,这本书在软件开发领域享有极高的声誉。重构是一种重要的软件工程实践,它旨在通过一系列微小的改进来逐步优化代码结构,提高...
《重构——改善既有代码设计》是软件工程领域的一部经典著作,作者Martin Fowler,该书与《设计模式》被并称为软件工程的双雄。《重构》一书的主旨在于向读者展示重构的过程与方法,即通过一系列小的、有步骤的改变...
### 重构:改善既有代码的设计 #### 书籍概述与核心价值 《重构:改善既有代码的设计》这本书由Martin Fowler撰写,是一本关于软件工程领域的经典著作。它详细介绍了如何通过一系列小步骤对现有代码进行改进,进而...
《重构:改善既有代码的设计》是软件开发领域的一本经典之作,由著名的软件开发者Martin Fowler撰写,本书同时提供了中文和英文两种版本,便于不同语言背景的读者阅读和学习。重构,这一概念在软件工程中占据着重要...
《重构:改善现有代码设计》是一本由Martin Fowler、Kent Beck、John Brant、William Opdyke和Don Roberts等IT领域的大师级人物共同撰写的经典著作,主要聚焦于如何通过重构技术提升软件代码的质量与可维护性。...
重构(中文版)--Java高手的必经之路1
标题中的"【EMD重构】.rar"指的是包含EMD重构过程的压缩文件,而"EMD重构函数"是指在处理EMD分解后的IMF分量时使用的特定函数。"IMF变量重构"则是指将分解得到的各个IMF重新组合成原始信号的过程。"tomorrowi4n"可能...
《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...
《重构:改善既有代码的设计》是一本由Martin Fowler所著的经典IT著作,它在软件开发领域具有极高的影响力。这本书的PDF和CHM版本都包含了关于重构和代码优化的深入探讨,是学习重构技术的理想资源。 重构是软件...
重构改善既有代码的设计第2版.pdf 本书主要讨论了如何通过重构来改善既有代码的设计,提高代码的可维护性、可读性和可扩展性。下面是对书中重要的知识点的总结: 1. 重构的定义和重要性:重构是指对既有代码的修改...
2. C#和***中的重构实践:书中详细介绍了在C#和***环境中如何进行代码重构,包括使用重构工具和技术来改进现有代码库。 3. 原型到企业级应用的转变:本书通过实例演示如何从创建原型应用开始,再通过重构技术逐步将...