代码的坏味道——何时该考虑代码的重构(重构—读书笔记系列)

本文列举了代码重构中的22种“坏味道”,包括重复代码、过长的函数、过大类等问题,这些问题可能导致代码难以维护和扩展。通过识别这些坏味道,开发者可以更好地改进代码质量。

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

1、重复的代码

如果你在一个以上的地点看到的相同的程序结构,就需设法将他们合而为一,这样才会使程序变得更好。

2、过长的函数

拥有段函数的对象会活的比较好、比较长。有一条原则:每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立的函数中,并以其用途命名。

要把函数变小,大部分的场合就是找到函数集中的部分,将他们提炼出来形成一个新函数。

3、过大类

过大类不易进行维护,最好的办法就是将其中独立的部分提炼出来;

4、过长参数列

太长的参数列难以理解,太多参数会造成前后不一致,不易使用。而且你一旦有了更多数据,就不得不修改它。如果将对象传递给函数,就可以减少参数。函数需要的东西大多可以在函数的宿主类中。

5、发散式变化

软件要有易修改的特性,一旦需要修改,我们希望跳到系统的某一点,只在该处做修改。如果不能做到这一点,你就能嗅到两种紧密相关的刺鼻味道中的一种了;

6、散弹式修改

如果遇到某种变化你都必须在许多不同的classes内做出许多小修改以响应。这种坏味道就是散弹式修改。你不但很难找到他们,也很容易忘记某个重要的修改;

7、依恋情节

对象技术全部要点在于,这是一种将数据和加诸其上的操作行为包装在一起的技术。函数对某个类的兴趣高过对自己所处的类的兴趣。

8、数据泥团

数据项经常有结队出现的现象,经常可以看到相同的三四笔数据,两个类内的相同值域、许多函数签名式中的相同参数。

9、基本型别偏执

大多数编程环境都有两种数据:结构型别允许你将数据组织成有意义的形式,基本型别则是构成结构型别的积木块。结构总是会带来一定的额外开销,就想数据库中的表格,或是那些得不偿失(只为做一件事而创建,却付出太大额外开销)的东西

10、switch惊悚现身

面向对象最显著的特征就是少用switch语句。本质上说,switch语句的问题在于重复。一看到switch语句,就应该考虑有多态来替换它。

11、平行继承体系

每当你为某个class增加一个subclass的时候,必须也为另一个class相应增加一个subclass.如果你发现某个继承体系的class名称前缀和另一个继承体系的class名称前缀完全相同。

12、冗赘类

你所创建的每一个class,都有人去理解它、维护它,如果一个class所得不值其身价,它就应该消失;

13、夸夸其谈未来性

当有人说我们总有一天需要做这事,并因而企图以各式各样的挂钩和特殊情况来处理一些非必要的事情。这么做往往造成系统更难理解和维护;

14、令人迷惑的暂时域

有时你会看到这样的对象:其内某个instance变量仅为某种特定情势而设。这样的代码不易理解,因为你通常任务对象在所有时候都需要它的所有变量。在变量未被使用的情况下猜测当初其设置的目的,会让你发疯的。

15、过度耦合的消息链

你看到用户向一个对象所求另一个对象,然后在想后者索求另一个对象,然后再索求另一个对象;

16、中间转手人

对象的基本特征就是封装,对外部世界隐藏起内部细节。过度使用委托,你也许会可能到某个class接口有一般的函数都委托给其他的class,这样就是过度运用;

17、狎昵关系

有时你看到两个classes过于亲密,花费太多时间去研究彼此的private成分

18、异曲同工类

如果两个函数做的是同一件事,却有着不同的签名式(signature),就属于异曲同工类;

19、不完美的程序库类

复用常被视为对象的终极目的。但是很多库类很难提前预想出所有我们需要使用的方法

20、纯稚的数据类

他们拥有一些值域,以及用于访问这些值域的函数。,除此一无长物。这样的class几乎一定被其他classes过分繁琐的操控着

21、被拒绝的遗赠

subclass应该继承superclass的函数和数据。但如果他们不想活不需要继承。

22、过多注释

可以带我们找到前提提到的各种坏味道









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值