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. ubuntu 14.04 Clion2016.2 安装激活与安装后添加快捷启动方式

    参考链接:http://www.cnblogs.com/conw/p/5938113.html 下载clion for linux : http://www.jetbrains.com/clion/d ...

  2. cakephp跳转到指定的错误页面

    第一步:修改core.php 第二步:创建AppExceptionRender.php文件 参考:https://blog.jordanhopfner.com/2012/09/11/custom-40 ...

  3. 修改ubuntu密码

    https://www.linuxidc.com/Linux/2016-05/131256.htm

  4. pcl知识

    1.pcl/io/pcd_io.h pcl/io/ply_io.h pcl::PLYReader reader; pcl::PCDWriter pcdwriter; 读取ply pcd 2.voidl ...

  5. MyBatis 3(中文版) 第四章 使用注解配置SQL映射器

    本章将涵盖以下话题: l 在映射器Mapper接口上使用注解 l 映射语句 @Insert,@Update,@Delete,@SeelctStatements l 结果映射 一对一映射 一对多映射 l ...

  6. Windows下搭建JSP开发环境

    1. 配置说明: => 编辑器: Eclipse (Java EE IDE) => 数据库: MySQL (MySQL Workbench 进行数据库管理, 用 MySQL Connect ...

  7. WireShark抓包的pcap文件格式分析

    http://www.360doc.com/content/14/0220/11/15257968_354157537.shtml http://www.360doc.com/content/14/0 ...

  8. vs2015 debugger,unable to attach to application iisexpress.exe

    vs2015 unable to attach to application iisexpress.exe,没有可用的数据了 搞了一天也没解决...

  9. 引用的一道JAVA题目

    code: class A { A() {}} class B extends A { } Which two statements are true? (Choose two) A. Class B ...

  10. idea中java文件打包出去步骤

     打包出去之后 通过xftp放在Linus上面去运行 然后用hadoop fs -put 放到hadoop集群上面(而且此时在/user/hadoop下面创建好input文件夹和一个输入的文件) 即 ...