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

重构_改善既有的代码设计(一)相关推荐

  1. 重构:改善既有代码的设计_技术债务:通过重构来拯救传统代码

    重构:改善既有代码的设计 How can you get a legacy codebase under control and bring it to a new level of maturity ...

  2. 《重构,改善既有代码的设计》读书笔记

    重构,绝对是写程序过程中最重要的事之一.在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了.更何况,我们很少有机会从头 ...

  3. 《重构-改善既有代码设计》读书笔记-重构篇

    2019独角兽企业重金招聘Python工程师标准>>> 重构定义 名词 对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本.--<重 ...

  4. 重构:改善既有代码的设计(评注版) 评注者序

    重构:改善既有代码的设计(评注版) 评注者序   评注者序 近十年来,若要讨论如何改进代码的质量,很难绕过Martin Fowler的这本经典著作.这本书已经影响了几代程序员,或许会持续不断地影响未来 ...

  5. 重构-改善既有的代码设计-------代码的坏味道

    重构-改善既有的代码设计 代码的坏味道 神秘命名(Mysterious Name) 给函数.变量.模块和类命名时,要使它能清晰地表明自己的功能和用法,使得写下的代码直观明了. 常用重构手法为重命名,包 ...

  6. 《重构:改善既有代码的设计》—第1章1.5节结语

    本节书摘来自异步社区<重构:改善既有代码的设计>一书中的第1章,第1.5节结语,作者[美]Martin Fowler,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  7. 重构:改善既有代码的设计(评注版)

    传世经典书丛  重构:改善既有代码的设计(评注版)  MartinFowler,Kent Beck,John Brant,William Opdyke,Don Roberts(马丁.福勒,肯特.贝克, ...

  8. 读《重构:改善既有代码的设计》的思考

    大家好,你们的简单猿来了. 今天我们聊一下<重构:改善既有代码的设计>这本书.以下简称为 "重构". 1.什么是重构? 按本书中的说法,重构这个概念被分成了动词和名词的 ...

  9. 重构改善既有代码设计

    目录 一.什么是重构 二.重构的目的和时机 2.1 目的 2.1.1 改进软件的设计 2.2.2 使软件更容易理解 2.2.3 帮助找到 BUG 2.2.4 提高编程速度 2.2 重构的时机 2.3 ...

最新文章

  1. 敏捷估算和计划的12条知道原则
  2. Kubernetes 网络概念及策略控制(叶磊)
  3. java定义一个方法,返回一个浮点数保留两位小数,考虑四舍五入的结果
  4. 分形图案c语言源程序,Mandlbrot集图形的一个C语言实现
  5. IDEA 2019.3新建项目找不到Maven的解决方法
  6. 远程登录软件secureCRT
  7. python两个函数中传递变量_如何在Python中向函数传递大量变量?
  8. python Gui基本使用方法
  9. 剑指Offer_16_合并两个排序的链表
  10. C语言 编写加密程序,将用户输入的一个英文句子加密为加密字符串,然后输出加密字符串。
  11. 对 a = [lambda : x for x in range(3)] 的理解
  12. WINCE下模拟鼠标点击,移动
  13. OBS Studio安装教程以及录制等详细配置
  14. 在Domino上部署运行在Web浏览器中的Notes客户机
  15. ue4网格转地形_不用建模就能生成地形,SU怎么办到的?!
  16. java 接口重写_java如何实现接口中的重写
  17. Linux下C/C++实现(网络流量分析-NTA)
  18. 模糊数学学习笔记 1:模糊集
  19. C语言讲义——开发工具Dev C++
  20. 关于ubuntu16.04 安装过程中卡住问题解决方法

热门文章

  1. 99乘法表的四种位置类型for...in while
  2. 我提交的一个内核补丁—CFS的child-runs-first
  3. Zookeper znode 4种类型 是什么?
  4. 如何提高.NET的性能 ?
  5. 360云计算|2019年度精选文章
  6. 一个关于数组中满足条件的元素选择、及再次排序得c语言函数。
  7. 使用 Redis的SETNX命令实现分布式锁
  8. centos 卸载vsftp
  9. 下一代微服务Service Mesh原理及实践
  10. linux进行显卡配置修改什么游戏,配置好Linux显卡驱动 爽快玩游戏