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

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

假设一段代码是不稳定或者有一些潜在问题的,那么代码往往会包括一些明显的痕迹。

正如食物要腐坏之前,常常会发出一些异味一样。

我们管这些痕迹叫做“代码异味”。

參考资料:

http://blog.csdn.net/sulliy/article/details/6635596

http://sourcemaking.com/refactoring/bad-smells-in-code


[解决方法]:提取公共函数。

[解决方法]:拆分成若干函数。

[解决方法]:拆分成若干类。

  • Long
    Parameter List
     ----(參数多)难用,难理解。

  • [解决方法]:将參数封装成结构或者类。

  • Divergent
    Change
     -------(万能类)发散试改动,改好多需求,都会动他。
[解决方法]:拆,将总是一起变化的东西放在一块儿。

  • Shotgun
    Surgery
     --------(天女散花的逻辑)散弹试改动,改某个需求的时候,要改非常多类。
[解决方法]:将各个改动点,集中起来,抽象成一个新类。

  • Feature
    Envy
     -----------(红杏出墙的函数)使用了大量其它类的成员
[解决方法]:将这个函数挪到那个类里面。

  • Data Clumps ------------(数据团)常一起出现的一坨数据。
[解决方法]:他们那么有基情,就在一起吧,给他们一个新的类。

  • Primitive
    Obsession
     ----(偏爱基本类型)热衷于使用int,long,String等基本类型。
[解决方法]:重复出现的一组參数,有关联的多个数组换成类吧。

[解决方法]:state/strategy
或者仅仅是简单的多态。


[解决方法]:应该有一个类是能够去掉继承关系的。

  • Lazy
    Class
     -------------------------------------(冗赘类)假设他不干活了,炒掉他吧。

[解决方法]:把这些不再重要的类里面的逻辑,合并到相关类,删掉旧的。

[解决方法]:删掉

  • Temporary
    Field
     --------------------------------(暂时字段)仅在特定环境下使用的变量
[解决方法]:将这些暂时变量集中到一个新类中管理。

  • Message
    Chains
     ---------------------------------(消息链)过度耦合的才是坏的。
[解决方法]:拆函数或者移动函数。

  • Middle
    Man
     -------------------------------------(中介)大部分都交给中介来处理了。

[解决方法]:用继承替代托付。

  • Inappropriate
    Intimacy
     -------------------------(太亲热)两个类彼此使用对方的私有的东西。
[解决方法]:划清界限拆散,或合并,或改成单项联系。

[解决方法]:重命名,移动函数,或抽象子类。

[解决方法]:包一层函数或包成新的类。

  • Data
    Class
     -------------(纯数据类)类非常easy,仅有公共成员变量,或简单操作函数。
[解决方法]:将相关操作封装进去,降低public成员变量。

  • Refused
    Bequest
     --------(继承过多)父类里面方法非常多,子类仅仅用有限几个。
[解决方法]:用代理替代继承关系。

  • Comments ---------------(太多凝视)这里指代码太难懂了,不得不用凝视解释。

[解决方法]:避免用凝视解释代码,而是说明代码的目的,背景等。好代码会说话。

22种代码的坏味道,一句话概括,布布扣,bubuko.com

时间: 2024-10-10 00:08:31

22种代码的坏味道,一句话概括的相关文章

22 种代码的坏味道

1.Duplicated Code(反复的代码) 臭味行列中首当其冲的就是Duplicated Code.假设你在一个以上的地点看到同样的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. 最单纯的Duplicated Code就是[同一个class内的两个方法含有同样表达式(expression)]. 这时候你须要做的就是採用Extract Method提炼出反复的代码,然后让这两个地点都调用被提炼出来的那一段代码. 还有一种常见情况就是[两个互为兄弟(sibling)的subcla

21种代码的坏“味道”

转自如此  http://www.cnblogs.com/matchcolor/tag/%E9%87%8D%E6%9E%84/ 综述:编码过程中不应该有的21中习惯和现象 每一种"味道"都会由对应的表现形式,遍历和避开每一种形式,就会离"优美"越近. 1. 重复代码 代码重复往往来自于"copy-and-paste"的编程风格,是Refactoring的主要目标之一. 2. 冗长的方法 冗长的方法体是传统结构化的"遗毒".一个

21种代码的“坏味道”

2001-10-25 16:18 1447人阅读 评论(0) 收藏 举报 refactoringprimitiveinheritanceclassparallellibrary 1.Duplicated Code代码重复几乎是最常见的异味了.他也是Refactoring 的主要目标之一.代码重复往往来自于copy-and-paste 的编程风格.与他相对应OAOO 是一个好系统的重要标志(请参见我的duplicated code 一文:http://www.erptao.org/download

Bad Smell (代码的坏味道)

sourcemaking 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹.正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 "代码异味".今天让我们一起来熟悉开发中经常出现的22种坏味道情形和解决方法. Duplicated Code 重复代码 不良影响 解决方法 重复代码,难维护 提取公共函数 Long Method 函数长 不良影响 解决方法 函数长, 难理解 拆分成若干函数 Large Class 类大 不良影响 解决方法 类大, 难理

<转载> 22种代码味道(Martin Fowler与Kent Beck) http://blog.csdn.net/lovelion/article/details/9301691

Martin Fowler在Refactoring: Improving the Design of Existing Code(中译名:<重构——改善既有代码的设计>)一书中与Kent Beck一起总结了22种代码坏味(Bad Smells in Code),因为Sunny这段时间正在做一些与代码味道自动识别与自动重构有关的研究工作,对这些内容进行了重新的深入理解与分析.后续将在博客中转载和原创一些相关的文章,希望对广大从事软件开发的朋友们能够带来些许帮助.你在编程过程中面临哪些代码味道?哪

代码的坏味道【4】

返回总目录 十四.Temporary Field(令人迷惑的暂时字段) 1.某个实例变量仅为某种特定的情况而设 2.某些实例字段仅为某个函数的复杂算法少传参数而设 将这些变量和相关函数提炼到一个独立的类中. 十五.Message Chains(过度耦合的消息链) 如果你看到用户向一个对象请求另一个对象,然后再向后者请求另一个对象,然后在请求另一个对象……这就是消息链. 实际代码就是一长串的getThis()或者一长串临时变量. 使用隐藏“委托关系”(这个后面会讲)来进行重构.当然了,可以在消息链

重构摘要3_代码的坏味道

如果尿布臭了,就换掉它. 1.Duplicated Code 重复代码 Extract Method Pull Up Method Form Template Method --> Template Method 模式 Substitute Algorithm --> 函数算法替代 2.Long Method 过长的函数 "间接层"所带来的全部利益--解释能力.共享能力.选择能力--都是有小函数支持的. 真正关键在于一个好名字. 每当感觉需要以注释来说明点什么的时候,我们就

重构笔记——代码的坏味道(上)

在重构入门篇中,简单地介绍了重构的定义.为何重构.何时重构等.我想对于重构是如何运作的,你已经有了较好的理解了.但是对于代码中的坏味道,你可能 知道的并不多.坏味道可能是无形中产生的,也可能是开发人员偷懒造成的,还可能是其它某些因素导致的.不管怎么样,代码中的坏味道对程序没有半点好处,它 会促使程序腐烂,甚至变质.对于开发人员,真的是很有必要对这些坏味道进行了解和熟悉,理解它们产生的场景.针对当前程序,发现坏味道,对代码进行重构, 以消除坏味道,提高代码质量,提高自己水平. 下面让我们一起来熟悉

关于重构(四)--代码的坏味道

代码的坏味道主要有: Duplicated Code---(重复的代码):如果你在两个以上的地点看到相同的程序结构,那可以:设法将它们合二为一,程序会变得更好. Long Method ------(过长函数): 1 private void bindSaleInfo(string swhere) 2 { 3 ArrayList proList = getProductInfo(swhere); 4 string colorStr = ""; 5 StringBuilder rowHt