重构学习笔记三(代码的坏味道)

本文探讨了软件重构中常见的五种情况及其解决方案,包括异曲同工的类、不完整的库类、数据类、拒收的馈赠及过多的注释,并提供了具体的改进措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[b]异曲同工的类[/b]
•症状:
–两个类看上完成相同的工作,但却使用了不同的方法名
•措施:
–协调各个类,使之取得一致,从而可以删除某个类
•采用重命名方法,使方法名类似
•使用移动方法、增加参数和方法参数化,从而使方法的协议(方法签名和实现途径)相似
•如果2个类只是相似而非相同,那么一旦对他们进行了很好的协调,就可以使用抽取超类
•如果可能的话,删除多余的类


[b]不完整的库类[/b]
•症状:
–你正在使用一个库类,而且希望在该类上有某个特性,但是却未能如愿。如果这是一个正常的类,就可以加以修改;但是,由于这是库的一部分,因此可能无法修改也不希望对它有所改变。
•措施:
–查看类或库的所有者是否考虑将来增加你所需的支持。
–如果仅仅是一两个方法,则可以对库类的客户应用引入外来方法(Introduce Foreign Method)
–如果存在多个方法需要增加,则要应用引入本地扩展(Introduce Local Extension)。再进一步使用这个新的扩展类。
–可能会决定引入一层来覆盖这个库


[b]数据类[/b]
•症状:
–类仅有字段构成,或者只有简单的赋值方法和取值方法构成
•措施:
–采用封装字段阻止对字段直接访问(仅允许通过赋值方法和取值方法进行访问)
–对可能的方法尽量采用移除设置方法(remove setting methods)
–采用封装集合(encapsulate collection)去除对所有集合类型字段的直接访问。
–查看对象的各个客户,如果客户试图对数据做同样的工作,则对客户采用抽取方法,然后将方法移到该类中。
–在完成上述工作后,可能发现类中存在多出相似的方法,使用诸如重命名方法、抽取方法、增加参数或者移除参数等重构技术,以协调签名,并消除重复
–对字段的大多数访问都不再需要,因为所移动的方法涵盖了其实际应用。因此可以使用隐藏方法来消除对赋值方法和取值方法的访问


[b]拒收的馈赠[/b]
•症状
–subclass应该继承superclass的方法和字段,但是subclass只使用了superclass的部分方法和字段
–如果subclass复用了superclass的行为(实现),却又没有支持superclass的接口
–继承没有实际意义;子类并非父类的一个例子
•措施
–如果不会导致混淆,可以顺其自然
–如果找不出原因来共享某个关系,则采用将继承替换为委托
–如果父-子类确实有意义,则可以通过抽取子类、下移字段和下移方法来创建一个新的子类。令此类有非拒绝行为,并将父类的客户修改为该新类的客户,这样父类就不必再提及此特性了。还可以从原来的类以及其父类中去除这些被拒绝的方法。
•说明


[b]过多的注释Comments[/b]
•症状:
–代码中出现注释符(//或/*)
•措施:
–抽取方法
–重命名方法
–引入断言
•其他说明:
–有些注释是有用的,不能一概删除
•指出为什么需要以某种方式完成某项工作
•引用了并非显而易见的算法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值