异曲同工的类
•症状:
–两个类看上完成相同的工作,但却使用了不同的方法名
•措施:
–协调各个类,使之取得一致,从而可以删除某个类
•采用重命名方法,使方法名类似
•使用移动方法、增加参数和方法参数化,从而使方法的协议(方法签名和实现途径)相似
•如果2个类只是相似而非相同,那么一旦对他们进行了很好的协调,就可以使用抽取超类
•如果可能的话,删除多余的类
不完整的库类
•症状:
–你正在使用一个库类,而且希望在该类上有某个特性,但是却未能如愿。如果这是一个正常的类,就可以加以修改;但是,由于这是库的一部分,因此可能无法修改也不希望对它有所改变。
•措施:
–查看类或库的所有者是否考虑将来增加你所需的支持。
–如果仅仅是一两个方法,则可以对库类的客户应用引入外来方法(Introduce Foreign Method)
–如果存在多个方法需要增加,则要应用引入本地扩展(Introduce Local Extension)。再进一步使用这个新的扩展类。
–可能会决定引入一层来覆盖这个库
数据类
•症状:
–类仅有字段构成,或者只有简单的赋值方法和取值方法构成
•措施:
–采用封装字段阻止对字段直接访问(仅允许通过赋值方法和取值方法进行访问)
–对可能的方法尽量采用移除设置方法(remove setting methods)
–采用封装集合(encapsulate collection)去除对所有集合类型字段的直接访问。
–查看对象的各个客户,如果客户试图对数据做同样的工作,则对客户采用抽取方法,然后将方法移到该类中。
–在完成上述工作后,可能发现类中存在多出相似的方法,使用诸如重命名方法、抽取方法、增加参数或者移除参数等重构技术,以协调签名,并消除重复
–对字段的大多数访问都不再需要,因为所移动的方法涵盖了其实际应用。因此可以使用隐藏方法来消除对赋值方法和取值方法的访问
拒收的馈赠
•症状
–subclass应该继承superclass的方法和字段,但是subclass只使用了superclass的部分方法和字段
–如果subclass复用了superclass的行为(实现),却又没有支持superclass的接口
–继承没有实际意义;子类并非父类的一个例子
•措施
–如果不会导致混淆,可以顺其自然
–如果找不出原因来共享某个关系,则采用将继承替换为委托
–如果父-子类确实有意义,则可以通过抽取子类、下移字段和下移方法来创建一个新的子类。令此类有非拒绝行为,并将父类的客户修改为该新类的客户,这样父类就不必再提及此特性了。还可以从原来的类以及其父类中去除这些被拒绝的方法。
•说明
过多的注释Comments
•症状:
–代码中出现注释符(//或/*)
•措施:
–抽取方法
–重命名方法
–引入断言
•其他说明:
–有些注释是有用的,不能一概删除
•指出为什么需要以某种方式完成某项工作
•引用了并非显而易见的算法
分享到:
相关推荐
附件是在读完《重构 改善既有代码的设计》之后,为代码的坏味道所撰写的总结文档。
代码的坏味道 重构方式对应表 DOC 可打印.
31天重构学习笔记中文汉化版,非常好的编程规范书籍
3. 代码的坏味道:包括神秘命名、重复代码、过长函数、过长参数列表、全局数据、可变数据、发散式变化、霰弹式修改、依恋情结、数据泥团、基本类型偏执、重复的switch、循环语句、冗赘的元素、夸夸其谈通用性、临时...
任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员
《重构 改善既有代码的设计》清晰揭示了重构的过程,解释了重构的原理和实践方式,并给出了何时以及何地应该开始挖掘代码以求改善。书中给出了70 多个可行的重构,每个重构都介绍了一种经过验证的代码变换手法的动机...
该文档是以前整理的笔记本,主要是针对代码坏问道的一些描述和一些解决办法。东西都是摘录的,虽然距离现在差多十几年,但是感觉还是可用的,所以分享一下。
重构改善既有代码的设计,重构改善既有代码的设计课件,重构改善既有代码的设计PPT
“每当我要进行重构的时候, 第一个步骤永远相同: 我得为即将修改的代码建立一组可靠的测试环境. 这些测试是必要的, 因为尽管遵循重构准则可以使我避免绝大多数的臭虫引入机会, 但我毕竟是人, 毕竟有可能犯错误. ...
JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构
重构 改善既有代码的设计.pdf
于是萌生想做一本重构工具书的想法,本来打算自己重新将重构书的内容再整理归类一下,后来发现原书的目录编排就很适合做工具书,包括坏味道分类,重构手法归类等,都有了一个比较系统的整理。因此,我利用空余时间...
重构——改善既有代码设计,经典文档,架构师必须教程
这个重构在微软的代码库也经常遇到。比如最经典的属性对字段的封装就是一个很好的例子,那么下面我们将看到对集合的封装,如下代码所示,调用端只需要一个集合的信息,而我们则提供了一个IList的集合,大家都知道...
NULL 博文链接:https://aqxiebin.iteye.com/blog/1579688
重构改善现有代码设计.pdf 重构改善现有代码设计.pdf
重构改善既有代码的设计 改善java代码结构, 让你的代码简洁
重构-改善既有代码的设计之代码的坏味道举例说明.md
常见的代码坏味道包括: 1. 重复的代码(Duplicated Code):可以通过提炼为一个方法、将重复的代码提到父类中、将相同部分构成单独函数、或者用 Template Method 设计模式来解决。 2. 过长的函数(Long Method)...