22种代码的坏味道,一句话概括:

如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹。
正如食物要腐坏之前,经常会发出一些异味一样。
我们管这些痕迹叫做“代码异味”。 参考资料:
http://blog.csdn.net/sulliy/article/details/6635596
http://sourcemaking.com/refactoring/bad-smells-in-code
Code smells
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语句)
[解决方法]: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 -----------------------(不完善的类库)
[解决方法]:包一层函数或包成新的类。
Data Class -------------(纯数据类)类很简单,仅有公共成员变量,或简单操作函数。
[解决方法]:将相关操作封装进去,减少public成员变量。
Refused Bequest --------(继承过多)父类里面方法很多,子类只用有限几个。
[解决方法]:用代理替代继承关系。
Comments ---------------(太多注释)这里指代码太难懂了,不得不用注释解释。
[解决方法]:避免用注释解释代码,而是说明代码的目的,背景等。好代码会说话。
---------------------
版权声明:本文为CSDN博主「windcao」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/windcao/article/details/25773219

  

Sonar中的坏习惯详解的更多相关文章

  1. 单元测试系列之四:Sonar平台中项目主要指标以及代码坏味道详解

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6766994.html 众所周知Sona ...

  2. Java中的main()方法详解

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...

  3. PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等

    页面导航: 首页 → 网络编程 → PHP编程 → php技巧 → 正文内容 PHP安全 PHP开发中常见的安全问题详解和解决方法(如Sql注入.CSRF.Xss.CC等) 作者: 字体:[增加 减小 ...

  4. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  5. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  6. 011-Scala中的apply实战详解

    011-Scala中的apply实战详解 object中的apply方法 class中的apply方法 使用方法 apply方法可以应用在类或者Object对象中 class类 必须要创建实例化的类对 ...

  7. C# WinForm 中 MessageBox的使用详解

    1.C# WinForm 中 MessageBox的使用详解:http://www.cnblogs.com/bq-blog/archive/2012/07/27/2611810.html

  8. JScript中的条件注释详解(转载自网络)

    JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...

  9. java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET

    java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了!      社区福利快来领取免费参加MDCC大会机会哦    Tag功能介绍—我们 ...

随机推荐

  1. java Random 带权重的随机选择

    实际场景中,经常要从多个选项中随机选择一个,不过,不同选项经常有不同的权重. /** * Created by xc on 2019/11/23 * 带权重的随机选择 */ public class ...

  2. 使用tuna源安装docker-ce

    原文链接:https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/ sudo add-apt-repository \ "deb [arch= ...

  3. [LOJ3053]希望

    对于一组$s_{1\cdots k}$,合法的$u$构成一个连通块,满足$\left\lvert V\right\rvert-\left\lvert E\right\rvert=1$ 考虑算出算$f_ ...

  4. (CSDN 迁移) JAVA多线程实现-支持定时与周期性任务的线程池(newScheduledThreadPool)

    前几篇文章中分别介绍了 单线程化线程池(newSingleThreadExecutor) 可控最大并发数线程池(newFixedThreadPool) 可回收缓存线程池(newCachedThread ...

  5. 如何录制高清GIF格式的图片

    如何录制高清GIF格式的图片 工具:傲软GIF 下载地址:https://www.apowersoft.cn/gif 特点:质量高,能够一帧一帧的修改 使用简单.就不说了.自行尝试.这里只是提供一个制 ...

  6. 【C++】static关键字有哪些用法?其主要作用是什么?

    static关键字的用法: 1)将全局变量修饰为静态全局变量 存储在静态存储区,整个程序运行期间一直存在 静态全局变量在声明它的文件之外是不可见的,只要声明它的文件可见,而普通的全局变量则是所有文件可 ...

  7. Idea Spring 、SpringBoot相关设置技巧

    1.Spring变量依赖注入出现红色波浪线 Could not autowire. No beans of 'UserMapper' type found. less... (Ctrl+F1) Che ...

  8. Python之路【第十二篇】:Python面向对象高级

    一.反射 1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究 ...

  9. xorm-删除和软删除实例

    删除数据Delete方法,参数为struct的指针并且成为查询条件.注意:当删除时,如果user中包含有bool,float64或者float32类型,有可能会使删除失败 package main i ...

  10. IDEA中使用git

    这篇文章写的很好,记录参考 [转载] https://blog.csdn.net/autfish/article/details/52513465 https://www.jianshu.com/p/ ...