代码的二十二道臭味
来源:互联网 发布:9wifi九维官方网络登录 编辑:程序博客网 时间:2024/04/27 01:53
这是一篇关于阅读《重构,改善既有代码的设计》后的笔记,记住了代码发臭的二十二种形式,并形成这样的意识,自己每次写代码的时候都能时刻提醒自己代码是否在发臭,那么我们的生活会更轻松。重构不可避免,但是尽量减少重构的概率还是很不错的。
1.重复代码。重复代码是我们这些初学者最容易犯的错了,复制粘贴固然省力,但是省的只是当时的力。一般来讲,可以复制粘贴的代码都是实现相似甚至相同功能的代码,要是这个序列的功能改了一点点,(⊙o⊙)…好累
2.过长的函数。我想看看这个函数主要做了些什么,怎么做的,可是…咦,这个变量是什么意思,这个If句子开始于哪里,这个花括号的前半截开始于哪里,我把光标滚到前面,可是滚回来的时候找了半天才回来,可是还是没能看到这个函数的主要步骤,(⊙o⊙)…好累,等等,这段代码在哪见过,是从那拷贝过来的?
3.过大的类。类太大了本身不是错,但是当它很长的时候就该提醒自己,是不是耦合了相关性不是很强的功能在这个类里?是否可以让这个类更单纯一点,只做好一件事?是否可以请其他类来帮忙完成相关工作?
4.参数列表过长。当一个函数参数列表过多时使用起来会很累,函数体也会倾向于过长,考虑把相似或紧密相关的参数封装起来,能够作为中间变量的把生成该变量的代码提出来做成另一个函数,然后使用局部变量。
5.发散式变化。如果需求有了改变,修改代码时就要大量的删除代码行再生成新代码时就该注意了。理想状况是如果要改代码,那么只改相关的少数几个点,而不影响其他代码的运行。
6.霰弹式修改。这和发散式变化相似,不同的是发散式变化在每一处变化都很少,但是却在很多点上进行类似修改。
7.依恋情结。写了很多类,但是他们在功能上却彼此相依,很难单独使用某些类,不利于复用,修改起来也会陷入前面两种困境。
8.数据泥团。几个类里都有语意相似的变量,这也是代码重复的一种形式,也可能是这些数据没有找到正确的依附的类,需要进一步抽象已达到封装数据的目的。
9.基本类型偏执。基本类型是做一切事情的基础,但是将他们组织为更有意义的复合类型(结构体和类)会让代码的编写、阅读、维护轻松很多很多。
10.switch惊悚现身。switch和if的问题在于重复,如果可以使用继承与多态把他们从代码中去除重复代码的话,就坚决地去除。但是不是所有的switch 和if都是不必要的。
11.平行继承体系。新增一个继承类时,马上就去另一个继承体系里增加一个类名前缀相似的子类时,就要警惕了。
12.冗赘类。每创建一个新的类都需要别人理解、维护,但是很多情况下他们只是临时工,仅为了实现某项功能而出现,不具有持久的生命力,换一个环境竟然不能复用。
13.夸夸奇谈未来性。编码时考虑未来可能会变更的地方,然后费力地使用各种淫巧奇技为特殊情况考虑是好习惯,但是考虑得过多就有问题了,那些概率很小的不是很重要的变化没有必要考虑。但是这和为了安全而防范不是一回事。这里说的变化是功能性或结构性的。
14.临时工字段。类中某些字段只是为了某些特殊状态时使用,就像临时工一样。类的字段应该是很重要的,必须的。
15.过度的消息链。不停地转发消息,消息经过长长的路径才到达实际处理者,这往往是类的职责划分不当,导致协作时很费力。
16.中间人。过度使用代理。
17.狎昵关系。为了合作,两个类需要费力地了解彼此的私有字段,表现得过于亲密。在初学者面前的表现形式为了协作的两个类公开了应该私有的字段。(理想状况下字段应该都是私有的)
18.异曲同工的类。这个说得很明白了,关键在于怎么识别。
19.不完美的类库。我也不懂做着要说的是什么,希望懂的人指导一下。
20.纯稚的数据类。一个类除了包含字段和存取字段的方法外,竟然再没有其他功能,只是充当了数据的容器。这个就看这个类的封装是否合理了,如果真的是,那么没话说。如果不是,那就一定是另一个类承担了这个类应有的职责,在其他地方产生了臭味。
21.被拒绝的馈赠。父类拥有的字段子类应该都需要,如果不是,那么就出了问题,这很怪异,可能不能满足is-a语意。
22.过多注释。这不是少些注释的借口,而是说注释关注的方面正确吗?注释存在的理由正确吗?
二十二道臭味已经呈现了,大家一起防臭吧!具体怎么防,请关注《重构,改善既有代码的设计》一书,以及设计模式相关的书籍。其实我们从前面也可以看到,有的臭味本身并没有错,却导致了其他地方的不合理,这是我们必须要注意的。作为结束,再加一道臭味:没有注释!
- 代码的二十二道臭味
- 让单元测试“嗅出”代码的臭味
- 8种臭味代码
- 设计的臭味
- > 设计的臭味
- 软件设计的臭味
- 设计的臭味
- 注释==代码臭味
- 臭味四溢的DOP
- (二十二)Git 代码管理工具
- 复合名是一种代码臭味
- 设计的臭味,腐化软件的气味
- 常见的设计臭味和设计原则
- 梳理caffe代码loss(二十二)
- 梳理caffe代码loss(二十二)
- 市场的二十二法则
- 二十二.数据的查询
- 代码的坏味道之二十二 :Comments(过多的注释)
- jquery 整合用用法-使用jquery操作session
- vx系统下查找内存被篡改的一种方法
- Spring Framework源码(十三):SpringMVC之从ModelMap到页面渲染
- opoa
- KVC
- 代码的二十二道臭味
- Facebook Hacker Cup 2015
- Android 资源(resource)学习小结
- 2. 基本数据类型-变量的使用
- latex一些使用技巧
- org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:
- Sql Server REPLACE函数的使用
- 直接修改Datagridview并保存到数据库
- Dalvik VM 剖析