首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
代码的坏味道 散弹式修改
2024-11-08
代码的坏味道(11)——霰弹式修改(Shotgun Surgery)
坏味道--霰弹式修改(Shotgun Surgery) 霰弹式修改(Shotgun Surgery) 类似于 发散式变化(Divergent Change) ,但实际上完全不同.发散式变化(Divergent Change) 是指一个类受多种变化的影响.霰弹式修改(Shotgun Surgery) 是指多种变化引发多个类相应的修改. 特征 任何修改都需要在许多不同类上做小幅度修改. 问题原因 一个单一的职责被拆分成大量的类. 解决方法 运用搬移函数(Move Method) 和 搬移字段(Mov
【重构】 代码的坏味道总结 Bad Smell (一) (重复代码 | 过长函数 | 过大的类 | 过长参数列 | 发散式变化 | 霰弹式修改)
膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/20009689 . 1. 重复代码 (Duplicated Code) 用到的重构方法简介 : Extract Method(提炼函数), Pull Up Method(函数上移), From
重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改
膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/20009689 . 1. 重复代码 (Duplicated Code) 用到的重构方法简介 : Extract Method(提炼函数), Pull Up Method(函数上移), From
代码的坏味道(10)——发散式变化(Divergent Change)
坏味道--发散式变化(Divergent Change) 发散式变化(Divergent Change) 类似于 霰弹式修改(Shotgun Surgery) ,但实际上完全不同.发散式变化(Divergent Change) 是指一个类受多种变化的影响.霰弹式修改(Shotgun Surgery) 是指多种变化引发多个类相应的修改. 特征 你发现你想要修改一个函数,却必须要同时修改许多不相关的函数.例如,当你想要添加一个新的产品类型时,你需要同步修改对产品进行查找.显示.排序的函数. 问题原因
Bad Smell (代码的坏味道)
sourcemaking 如果一段代码是不稳定或者有一些潜在问题的,那么代码往往会包含一些明显的痕迹.正如食物要腐坏之前,经常会发出一些异味一样, 我们管这些痕迹叫做 "代码异味".今天让我们一起来熟悉开发中经常出现的22种坏味道情形和解决方法. Duplicated Code 重复代码 不良影响 解决方法 重复代码,难维护 提取公共函数 Long Method 函数长 不良影响 解决方法 函数长, 难理解 拆分成若干函数 Large Class 类大 不良影响 解决方法 类大, 难理
Chapter 3 :代码的坏味道
"如果尿布臭了,就换掉它." --Beck奶奶,论保持小孩清洁的哲学 代码的坏味道这一章集中论述该何时重构.具体的重构方法在后面的章节. "没有任何度量规矩比得上见识广博者的直觉.你必须培养自己的判断力,学会判断一个类中有多少实例变量才算太大,一个函数内有多少代码才不算太长." --Martin Flower 3.1 改名 深思熟虑给函数,模块,变量和类命名,使其清晰的表明自己的功能和用法. 重构手法之一:改名(改变函数声明,变量改名,字段改名) 3.2 消除重
消灭 Java 代码的“坏味道”
消灭 Java 代码的“坏味道” 原创: 王超 阿里巴巴中间件 昨天 导读 明代王阳明先生在<传习录>谈为学之道时说: 私欲日生,如地上尘,一日不扫,便又有一层.着实用功,便见道无终穷,愈探愈深,必使精白无一毫不彻方可. 代码中的"坏味道",如"私欲"如"灰尘",每天都在增加,一日不去清除,便会越累越多.如果用功去清除这些"坏味道",不仅能提高自己的编码水平,也能使代码变得"精白无一毫不彻".这
Refactoring之——代码的坏味道(一)过长方法
1 代码的坏味道 重构一书中提到了22种代码的坏味道,大致可以分为几类. 识别代码的坏味道,有助于发现代码的潜在问题,从而可以有的放矢的修改现有代码,使之不断完善. 1.1 Bloaters(臭鲱,暂译臭代码) 这种类型的味道意味着:代码.函数和类的问题没有立马凸显,但是随着代码不断改变,问题就会越来越明显. 包含五种: 1.1.1 Long Method(过长方法) 特征: 一个方法含有太多行代码.一般来说,任何方法超过10行时,你就可以考虑是不是过长了.函数中的代码行数原则上不要你超过100
重构之Divergent Change(发散式变化)&Shotgun Surgery (散弹式修改)
5.Divergent Change发散式变化 描述:一个类被锚定了多个变化,当这些变化中的任意一个发生时,就必须对类进行修改. 解释:一个类最好只因一种变化而被修改 操作:你应该找出某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个类中. 6.Shotgun Surgery散弹式修改 描述:一种变化引发程序多处的修改. 解释:一种变化在程序中有多个锚点,并且分散在程序各处.(就像散弹一样) 需要修改的代码散布四处,你不但很难找到它们,也很容易忘记某个重要的修改.
代码的坏味道(12)——平行继承体系(Parallel Inheritance Hierarchies)
坏味道--平行继承体系(Parallel Inheritance Hierarchies) 平行继承体系(Parallel Inheritance Hierarchies) 其实是 霰弹式修改(Shotgun Surgery) 的特殊情况. 特征 每当你为某个类添加一个子类,必须同时为另一个类相应添加一个子类.这种情况的典型特征是:某个继承体系的类名前缀或类名后缀完全相同. 问题原因 起初的继承体系很小,随着不断添加新类,继承体系越来越大,也越来越难修改. 解决方法 一般策略是:让一个继承体系的
【转】Bad Smell(代码的坏味道)
1.Duplicated Code(重复的代码) 臭味行列中首当其冲的就是Duplicated Code.如果你在一个以上的地点看到相同的程序结构,那么当可肯定:设法将它们合而为一,程序会变得更好. 最单纯的Duplicated Code就是[同一个class内的两个方法含有相同表达式(expression)].这时候你需要做的就是采用Extract Method提炼出重复的代码,然后让这两个地点都调用被提炼出来的那一段代码. 另一种常见情况就是[两个互为兄弟(sibling)的subclass
代码的坏味道(22)——不完美的库类(Incomplete Library Class)
坏味道--不完美的库类(Incomplete Library Class) 特征 当一个类库已经不能满足实际需要时,你就不得不改变这个库(如果这个库是只读的,那就没辙了). 问题原因 许多编程技术都建立在库类的基础上.库类的作者没用未卜先知的能力,不能因此责怪他们.麻烦的是库往往构造的不够好,而且往往不可能让我们修改其中的类以满足我们的需要. 解决方法 如果你只想修改类库的一两个函数,可以运用 引入外加函数(Introduce Foreign Method): 如果想要添加一大堆额外行为,就得运
代码的坏味道(19)——狎昵关系(Inappropriate Intimacy)
坏味道--狎昵关系(Inappropriate Intimacy) 特征 一个类大量使用另一个类的内部字段和方法. 问题原因 类和类之间应该尽量少的感知彼此(减少耦合).这样的类更容易维护和复用. 解决方法 最简单的解决方法是运用 搬移函数(Move Method) 和 搬移字段(Move Field) 来让类之间斩断羁绊. 你也可以看看是否能运用 将双向关联改为单向关联(Change Bidirectional Association to Unidirectional) 让其中一个类对另一个
代码的坏味道(20)——过度耦合的消息链(Message Chains)
坏味道--过度耦合的消息链(Message Chains) 特征 消息链的形式类似于:obj.getA().getB().getC(). 问题原因 如果你看到用户向一个对象请求另一个对象,然后再向后者请求另一个对象,然后再请求另一个对象--这就是消息链.实际代码中你看到的可能是一长串getThis()或一长串临时变量.采取这种方式,意味客户代码将与查找过程中的导航紧密耦合.一旦对象间关系发生任何变化,客户端就不得不做出相应的修改. 解决方法 可以运用 隐藏委托关系(Hide Delegate)
代码的坏味道(16)——纯稚的数据类(Data Class)
坏味道--纯稚的数据类(Data Class) 特征 纯稚的数据类(Data Class) 指的是只包含字段和访问它们的getter和setter函数的类.这些仅仅是供其他类使用的数据容器.这些类不包含任何附加功能,并且不能对自己拥有的数据进行独立操作. 问题原因 当一个新创建的类只包含几个公共字段(甚至可能几个getters / setters)是很正常的.但是对象的真正力量在于它们可以包含作用于数据的行为类型或操作. 解决方法 如果一个类有公共字段,你应该运用 封装字段(Encapsulat
代码的坏味道(13)——过多的注释(Comments)
坏味道--过多的注释(Comments) 特征 注释本身并不是坏事.但是常常有这样的情况:一段代码中出现长长的注释,而它之所以存在,是因为代码很糟糕. 问题原因 注释的作者意识到自己的代码不直观或不明显,所以想使用注释来说明自己的意图.这种情况下,注释就像是烂代码的除臭剂. 最好的注释是为函数或类起一个恰当的名字. 如果你觉得一个代码片段没有注释就无法理解,请先尝试重构,试着让所有注释都变得多余. 解决方法 如果一个注释是为了解释一个复杂的表达式,可以运用 提炼变量(Extract Variab
代码的坏味道(9)——异曲同工的类(Alternative Classes with Different Interfaces)
坏味道--异曲同工的类(Alternative Classes with Different Interfaces) 特征 两个类中有着不同的函数,却在做着同一件事. 问题原因 这种情况往往是因为:创建这个类的程序员并不知道已经有实现这个功能的类存在了. 解决方法 如果两个函数做同一件事,却有着不同的签名,请运用 函数改名(Rename Method) 根据它们的用途重新命名. 运用 搬移函数(Move Method) . 添加参数(Add Parameter) 和 令函数携带参数(Parame
代码的坏味道(6)——Switch声明(Switch Statements)
坏味道--Switch声明(Switch Statements) 特征 你有一个复杂的 switch 语句或 if 序列语句. 问题原因 面向对象程序的一个最明显特征就是:少用 switch 和 case 语句.从本质上说,switch 语句的问题在于重复(if 序列也同样如此).你常会发现 switch 语句散布于不同地点.如果要为它添加一个新的 case 子句,就必须找到所有 switch 语句并修改它们.面向对象中的多态概念可为此带来优雅的解决办法. 大多数时候,一看到 switch 语
代码的坏味道(4)——过长参数列(Long Parameter List)
坏味道--过长参数列(Long Parameter List) 特征 一个函数有超过3.4个入参. 问题原因 过长参数列可能是将多个算法并到一个函数中时发生的.函数中的入参可以用来控制最终选用哪个算法去执行. 过长参数列也可能是解耦类之间依赖关系时的副产品.例如,用于创建函数中所需的特定对象的代码已从函数移动到调用函数的代码处,但创建的对象是作为参数传递到函数中.因此,原始类不再知道对象之间的关系,并且依赖性也已经减少.但是如果创建的这些对象,每一个都将需要它自己的参数,这意味着过长参数列. 太
解析大型.NET ERP系统 代码的坏味道
1 对用户输入做过多的约定和假设 配置文件App.config中有一个设定报表路径的配置节: <add key="ReportPath" value="C:\Users\Administrator"/> 在程序中有一个销售报表文件SalesReport.rpt,用代码调用这个报表,可能会写成: string salesReport=ReportPath + "SalesReport.rpt"; 因为路径末尾没有加反斜线,会抛出找不到
热门专题
sfc20各个引脚的作用
centos firewall 端口ipv4转发
boost提取文件名
pytest html测试报告中可能无法按预期显示文件或链
vuerouter和location.href之间混用
axios 加上时间戳
fftw3.h头文件visual studio code
JAVA怎么实现订单模块
axios post query和data
adt 工程 无法创建activity
接口自动化的ddt装饰器是什么
springboot map转换成嵌套bean
yolo行人检测模型
android 5.0 vector 填色
kafka windows 安装
怎么获取drugbank的数据
c#读取word打印
C 控制台输出彩色字体
华为电脑microsoft store打不开
指定的域不存在或无法联系怎么办