重构_改善既有的代码设计(一)
2019独角兽企业重金招聘Python工程师标准>>>
1、代码块愈小,代码的功能就愈容易管理
2、将switch语句,提炼到独立的函数中
3、寻找switch语句中的局部变量
4、查看局部变量在switch语句内是否被修改,没有被修改的,可以考虑当做参数传入
被修改的可以考虑,作为独立函数的返回值返回。返回的一个变量,可以改名为result,看着就知道是什么意思。传入的rental,可以改为aRental,表明是一个。
注意返回值类型。
5、发现独立函数使用了来了Rental类的信息,却没有使用来自Customer类的信息,
可能函数放错地方了,将函数移到Rental中,并修改方法名为getCharge,因为这是一个计算费用的方法,方法名要能表示功能。
6、发现原来statement方法中的thisAmount变量,接受each.getCharge()的执行结果之后,就不再有任何改变,所以可以直接用each.getCharge()代替。尽量去除这一类临时变量。临时变量往往引发问题,它们会导致大量参数被传来传去,而其实完全没有这种必要。你很容易跟丢它们,尤其在长长的函数之中更是如此。当然这么做也需付出性能上的代价,比如本例的费用就被计算了两次。但这很容易在Rental类中被优化。。。而且如果代码有合理的组织和管理,优化就会有很好的效果。
7、将statement方法中的“常客积分计算”部分,抽出来,看着应该是放在Rental类中。临时变量frequentRenterPoints,在它被使用之前,先有初始值,但是提炼出来的函数并没有读取该值,所以我们不需要将它当做参数传进去,只需把新函数的返回值累加上去就行。
8、去除临时变量。临时变量可能是个问题,它们只在自己所属的函数中有效,它们会助长冗长而复杂的函数。在Customer类中新建一个方法getTotalCharge(),重新编写计算过程,然后用这个方法取代totalAmount这个局部变量。临时变量frequentRenterPoints也做同样的处理。我们需要把循环复制到这两个方法中
9、这时候,用户准备更改影片分类规则,与之相对应的费用计算方式和常客积分计划还有待决定,现在还不宜对程序做修改。我们必须进入费用计算和常客积分计算中,把因条件而异的代码替换掉(这里指的是switch语句中的case子句)
10、运用多态取代与价格相关的条件逻辑。最好不要在另一个对象的属性基础上运用switch语句。如果不得不使用,也应该在对象自己的数据上使用,而不是在别人的数据上使用。如本例,switch(getMovie().getPriceCode())...暗示getCharge()应该移到Movie类里去,需要把租期长度作为参数传进去。租赁长度来自Rental对象。计算费用时需要两项数据:租期长度和影片类型。为什么选择将租期长度传给Movie对象,而不是将影片类型传给Rental对象?系统可能发生的变化时加入新影片类型,如果影片类型有所变化,尽量控制它造成的影响(保持不变),所以选择在Movie对象内计算费用。用同样的手法处理常客积分计算。
11、一部影片可以在生命周期内修改自己的分类,一个对象却不能在生命周期内修改自己所属的类(这句话有点抽象啊,不是很理解)。下面引入State模式与Strategy模式,之前只听说过Strategy模式,补一下State模式,并了解到这两个设计模式非常相似,只是State多了状态的改变(不知道说得对不对)。
接下来是一堆的重构。第一个例子非常精美,对重构感兴趣的,都可以去看一看
转载于:https://my.oschina.net/zjchase/blog/224371
重构_改善既有的代码设计(一)相关推荐
- 重构:改善既有代码的设计_技术债务:通过重构来拯救传统代码
重构:改善既有代码的设计 How can you get a legacy codebase under control and bring it to a new level of maturity ...
- 《重构,改善既有代码的设计》读书笔记
重构,绝对是写程序过程中最重要的事之一.在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了.更何况,我们很少有机会从头 ...
- 《重构-改善既有代码设计》读书笔记-重构篇
2019独角兽企业重金招聘Python工程师标准>>> 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本.--<重 ...
- 重构:改善既有代码的设计(评注版) 评注者序
重构:改善既有代码的设计(评注版) 评注者序 评注者序 近十年来,若要讨论如何改进代码的质量,很难绕过Martin Fowler的这本经典著作.这本书已经影响了几代程序员,或许会持续不断地影响未来 ...
- 重构-改善既有的代码设计-------代码的坏味道
重构-改善既有的代码设计 代码的坏味道 神秘命名(Mysterious Name) 给函数.变量.模块和类命名时,要使它能清晰地表明自己的功能和用法,使得写下的代码直观明了. 常用重构手法为重命名,包 ...
- 《重构:改善既有代码的设计》—第1章1.5节结语
本节书摘来自异步社区<重构:改善既有代码的设计>一书中的第1章,第1.5节结语,作者[美]Martin Fowler,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...
- 重构:改善既有代码的设计(评注版)
传世经典书丛 重构:改善既有代码的设计(评注版) MartinFowler,Kent Beck,John Brant,William Opdyke,Don Roberts(马丁.福勒,肯特.贝克, ...
- 读《重构:改善既有代码的设计》的思考
大家好,你们的简单猿来了. 今天我们聊一下<重构:改善既有代码的设计>这本书.以下简称为 "重构". 1.什么是重构? 按本书中的说法,重构这个概念被分成了动词和名词的 ...
- 重构改善既有代码设计
目录 一.什么是重构 二.重构的目的和时机 2.1 目的 2.1.1 改进软件的设计 2.2.2 使软件更容易理解 2.2.3 帮助找到 BUG 2.2.4 提高编程速度 2.2 重构的时机 2.3 ...
最新文章
- 敏捷估算和计划的12条知道原则
- Kubernetes 网络概念及策略控制(叶磊)
- java定义一个方法,返回一个浮点数保留两位小数,考虑四舍五入的结果
- 分形图案c语言源程序,Mandlbrot集图形的一个C语言实现
- IDEA 2019.3新建项目找不到Maven的解决方法
- 远程登录软件secureCRT
- python两个函数中传递变量_如何在Python中向函数传递大量变量?
- python Gui基本使用方法
- 剑指Offer_16_合并两个排序的链表
- C语言 编写加密程序,将用户输入的一个英文句子加密为加密字符串,然后输出加密字符串。
- 对 a = [lambda : x for x in range(3)] 的理解
- WINCE下模拟鼠标点击,移动
- OBS Studio安装教程以及录制等详细配置
- 在Domino上部署运行在Web浏览器中的Notes客户机
- ue4网格转地形_不用建模就能生成地形,SU怎么办到的?!
- java 接口重写_java如何实现接口中的重写
- Linux下C/C++实现(网络流量分析-NTA)
- 模糊数学学习笔记 1:模糊集
- C语言讲义——开发工具Dev C++
- 关于ubuntu16.04 安装过程中卡住问题解决方法