sourcemaking

如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹。
正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 “代码异味”
今天让我们一起来熟悉开发中经常出现的22种坏味道情形和解决方法。

Duplicated Code


重复代码
不良影响 解决方法
重复代码,难维护 提取公共函数

Long Method


函数长
不良影响 解决方法
函数长, 难理解 拆分成若干函数

Large Class


类大
不良影响 解决方法
类大, 难理解 拆分成若干类

Long Parameter List


参数多
不良影响 解决方法
参数多,难用,难理解 将参数封装成结构或者类

Divergent Change


万能类
不良影响 解决方法
万能类,发散试修改,改好多需求,都会动他 拆,将总是一起变化的东西放在一块儿

Shotgun Surgery


天女散花的逻辑
不良影响 解决方法
天女散花的逻辑,散弹式修改,改某个需求的时候,要改很多类 将各个修改点,集中起来,抽象成一个新类

Feature Envy


红杏出墙的函数
不良影响 解决方法
红杏出墙的函数,使用了大量其他类的成员 将这个函数挪到那个类里面

Data Clumps


数据团
不良影响 解决方法
数据团,常一起出现的一坨数据 他们那么有基情,就在一起吧,给他们一个新的类

Primitive Obsession


偏爱基本类型
不良影响 解决方法
偏爱基本类型,热衷于使用int,long,String等基本类型 反复出现的一组参数,有关联的多个数组换成类吧

Switch Statements


switch语句过多
不良影响 解决方法
switch语句过多, 难以理解和维护 state/strategy 或者只是简单的多态

Parallel Inheritance Hierarchies


平行继承
不良影响 解决方法
平行继承,增加A类的子类ax,B类也需要相应的增加一个bx 应该有一个类是可以去掉继承关系的。

Lazy Class


冗赘类
不良影响 解决方法
冗赘类,如果他不干活了,炒掉他吧 把这些不再重要的类里面的逻辑,合并到相关类,删掉旧的

Speculative Generality


夸夸其谈未来性
不良影响 解决方法
夸夸其谈未来性 删掉

Temporary Field


临时字段
不良影响 解决方法
临时字段,仅在特定环境下使用的变量 将这些临时变量集中到一个新类中管理

Message Chains


消息链
不良影响 解决方法
消息链,过度耦合的才是坏的 拆函数或者移动函数

Middle Man


中介
不良影响 解决方法
中介,大部分都交给中介来处理了 用继承替代委托

Inappropriate Intimacy


太亲密
不良影响 解决方法
太亲密,两个类彼此使用对方的私有的东西 划清界限拆散,或合并,或改成单项联系

Alternative Classes with Different Interfaces


相似的类
不良影响 解决方法
相似的类,有不同接口 重命名,移动函数,或抽象子类

Incomplete Library Class

不良影响 解决方法
不完善的类库 包一层函数或包成新的类

[https://sourcemaking.com/data-class]()


纯数据类
不良影响 解决方法
纯数据类,类很简单,仅有公共成员变量,或简单操作函数 将相关操作封装进去,减少public成员变量

Refused Bequest


继承过多
不良影响 解决方法
继承过多,父类里面方法很多,子类只用有限几个 用代理替代继承关系

Comments


太多注释
不良影响 解决方法
太多注释,这里指代码太难懂了,不得不用注释解释 避免用注释解释代码,而是说明代码的目的,背景等。好代码会说话

参考资料

Bad Smell (代码的坏味道)的更多相关文章

  1. 【转】Bad Smell(代码的坏味道)

    1.Duplicated Code(重复的代码) 臭味行列中首当其冲的就是Duplicated Code.如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. ...

  2. 【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...

  3. 重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...

  4. Refactoring之——代码的坏味道(一)过长方法

    1 代码的坏味道 重构一书中提到了22种代码的坏味道,大致可以分为几类. 识别代码的坏味道,有助于发现代码的潜在问题,从而可以有的放矢的修改现有代码,使之不断完善. 1.1 Bloaters(臭鲱,暂 ...

  5. Chapter 3 :代码的坏味道

    "如果尿布臭了,就换掉它." --Beck奶奶,论保持小孩清洁的哲学 代码的坏味道这一章集中论述该何时重构.具体的重构方法在后面的章节. "没有任何度量规矩比得上见识广博 ...

  6. 消灭 Java 代码的“坏味道”

    消灭 Java 代码的“坏味道” 原创: 王超 阿里巴巴中间件 昨天 导读 明代王阳明先生在<传习录>谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层.着实用功,便见道无终穷,愈 ...

  7. 代码的坏味道(22)——不完美的库类(Incomplete Library Class)

    坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建 ...

  8. 代码的坏味道(19)——狎昵关系(Inappropriate Intimacy)

    坏味道--狎昵关系(Inappropriate Intimacy) 特征 一个类大量使用另一个类的内部字段和方法. 问题原因 类和类之间应该尽量少的感知彼此(减少耦合).这样的类更容易维护和复用. 解 ...

  9. 代码的坏味道(20)——过度耦合的消息链(Message Chains)

    坏味道--过度耦合的消息链(Message Chains) 特征 消息链的形式类似于:obj.getA().getB().getC(). 问题原因 如果你看到用户向一个对象请求另一个对象,然后再向后者 ...

随机推荐

  1. sql优化 原因

    不使用子查询例: SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang'); 子查询在MySQL5.5版本里,内部执行 ...

  2. IIS “另一个程序正在使用此文件,进程无法访问"

    重启iis,提示"另一个程序正在使用此文件,进程无法访问".一开始就怀疑是80端口被占用,修改iis的端口为其它端口,重启iis, 果然成功. 在命令行,netstat -nabo ...

  3. Python 与 Javascript 比较

    最近由于工作的需要开始开发一些Python的东西,由于之前一直在使用Javascript,所以会不自觉的使用一些Javascript的概念,语法什么的,经常掉到坑里.我觉得对于从Javascript转 ...

  4. jquery中html()、text()、val()的区别

     (2013-03-26 10:49:16) 转载▼ 分类: jquery   .html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改 ...

  5. SpringMVC 2.5.6 +Hibernate 3.2.0

    spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力 外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时 ...

  6. SimpleDateFormat是线程不安全的

    线程不安全的SimpleDateFormat SimpleDateFormat是线程不安全的 SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但 ...

  7. How attach Java source(为eclipseIDE附加资源)

    In Eclipse, when you press Ctrl button and click on any  Class names, the IDE will take you to the s ...

  8. Linux-在新买的阿里云服务器上部署Tomcat并支持外网访问的配置(步骤记录)

    一.首先你得有一台外网上的服务器 华为.腾讯.阿里都有云服务售卖,我这里是在阿里云打折时购买的. 二.使用Xshell和XFTP连接上云服务 当然了,连接工具有很多种,可随意.购买服务器之后,你会收到 ...

  9. 【小梅哥SOPC学习笔记】系统时钟的使用

    给NIOS II CPU添加一颗澎湃的心——系统时钟的使用 本实验介绍如何在Qsys中添加一个定时器作为NIOS II的心跳定时器,并在NIOS II中软件编程使用该定时器. 将上一个实验watchd ...

  10. MFC中按钮控件的用法笔记(转)

    VC学习笔记1:按钮的使能与禁止 用ClassWizard的Member Variables为按钮定义变量,如:m_Button1:则m_Button1.EnableWindow(true); 使按钮 ...