代码坏味道

代码坏味道有24种?我看未必! 《重构》的大佬Martin Fowler给出24种代码坏味道,但我看未必。我认为有些坏味道犯了“重复坏味道”的问题,所以我把它们汇总到最后一章重复的坏味道中,大家看完其他坏味道再看这些,便可很快理解。 阅读详情

22中常见的代码坏味道

 

Duplicated Code(重复代码)

解决方式:

1:同一个类的两个函数含有相同的表达式,采用Extract Method;

2:两个互为兄弟的子类中内含有相同的表达式,采用Extract Method,然后在对提炼出来的代码使用Pull Up Method,将他推入超类中;

3:两个毫无关系的类出现代码重复,应该考虑对其中一个类使用Extract Method,将重复代码提炼到一个独立的类中,然后在另一个类内使用这个新类;

Long Method(过长的函数)

遵循原则:

每当感觉需要以注释来说明点什么的时候,我们就把需要说明的东西写进一个独立函数中,并以其用途命名;

解决方法:

1:将过长的函数变小,采用Extract Method;

如果函数内有大量的临时变量,它们会对你的函数提炼形成一种障碍;如果你用Extract Method,最终将会把很多参数和临时变量当做参数,传递给被提炼出来的新函数,导致可读性几乎没有提升;

 

消除临时变量的方法:

1:Replace Temp with Query

2:Introduce Parameter Object

3:Preserve Whole Object

4:Replace Method with Method Object

提炼方法技巧:

1:寻找注释

2:条件表达式和循环表达式

 

Large Class(过大的类)

解决方法:

运用Extract Class或者Extract subClass将几个变量一起提炼至一个新类内,提炼时应该选择类内彼此相关的变量,将它们放到一起;

 

Long Parameter List(过长参数列)

解决方法:

1:Introduce Parameter Object

2:Preserve Whole Object

3:Replace Parameter with Method

 

Divergent Change(发散式变化)

解决方法:

针对某一外界变化的所有相应修改,都只应该发生在单一类中,而这个新类内的所有内容都应该反映此变化;

你应该找出某特定原因而造成的所有变化,然后运用Extract Class将它们提炼到另一个类中;

 

Shotgun Surgery(霰弹式修改)

解决方法:

Divergent Change是指:一个类受多种变化的影响;

Shotgun Surgery是指:一种变化引发多个类相应的修改;

使用Move Method和Move Field把所有的修改放进同一个类,如果眼下没有合适的类可以安置这些代码,就创造一个。通常可以运用Inline Class把一系列相关行为放进同一个类

 

Feature Envy(依恋情节)

现象:

函数对某个类的兴趣高过对自己所处类的兴趣;(一般都是数据引起的原因)某个函数为了计算某个值,从另一个对象哪儿调用几乎半打的取值函数

解决方法:

使用Move Method将函数移至另一个地点,有时候函数中只有一部分受这种依恋之苦,这种时候你应该使用Extract Method把这一部分函数提炼到独立的函数中,再使用Move Method带它去该去地方;

如果一个函数会用到几个类的功能,使用的原则是:判断哪个类拥有最多被此函数使用的数据,然后把这个函数和那些数据摆在一起;

对抗坏味道Divergent Change,最基本的原则是:将总是一起变化的东西放在一块儿。

 

Data Clumps(数据泥团)

解决方法:

两个类中相同的字段,许多函数签名中相同的参数。这些总是绑在一起出现的数据真应该拥有属于它们自己的对象;首先请找出这些数据以字段形式出现的地方,运用Extract Class将它们提炼到一个独立对象中;然后将注意力转移到函数签名上,运用Introduce Parameter Object Preserve Whole Object为它减肥;这么做的直接好处是可以将函数很多的参数列缩短,简化函数的调用;

 

Primitive Obsession(基本类型偏执)

解决方法:

1:结合数值和币种的money类

2:由一个起始值和一个结束值组成的range类

3:由电话号码或邮政编码的number类

如果以上三种情况运用Replace Data Value with Object将原本单独存在的数据替换为对象;

如果想要替换的数据值是类型码,可以运用Replace Type Code with Class将它替换;

如果你有与类型码相关的条件表达式,可运用Replace Type code with Subclass或者Replace Type code with State/Stategy

 

Switch Statements(switch惊悚现身)

解决方法:

少用switch(或case)语句,从本质上说,switch语句问题在于重复;

大多数的时候,一看到switch语句,你就应该考虑以多态来替换它;问题是多态该出现在什么地方;

switch语句常常根据类型码进行选择,你要的是,"与该函数码相关的函数或类",所以应该使用Extract Method将switch提炼到一个独立函数中,再以Move Method将它搬移到需要多态性的那个类里;此时你必须决定是否使用Replace Type code with Subclass或者Replace Type code with State/Stategy,一旦这样完成继承结构之后,你就可以运用Replace Conditional with Polymorphism了;

 

Parallel Inheritance Hierarchies(平行继承体系)

解决方法:

在这种情况下,每当你为每某个类增加一个子类,必须也为另一个类相应增加一个子类;如果你发现某个继承体系的类名称前缀和另一个继承体系的类名称前缀完全相同,便问道了这种坏味道;

让一个继承体系的实例引用一个继承体系的实例,如果再接再厉运用Move Method和Move Field,就可以引用端的继承体系消弭于无形;

 

Lazy Class(冗赘类)

解决方法:

如果某些子类没有做足够的工作,试试Collapse Hieracchy(折叠继承体系),对于几乎没用的组件,你应该以Inline Class对付它们;

 

Speculative Generality(夸夸其谈未来性)

解决方法:

我想我们总有一天需要做这事,并因而企图以各式各样的钩子和特殊情况来处理一些非必要的事情,这种坏味道就出现了,那么做的结果往往造成体系更难理解和维护;如果所有装置都会被用到,那就值得那么做,如果用不到,就不值得。用不上的装置会挡你的路;

如果你的某一个抽象类其实没有太大的作用,运用Collapse Hieracchy。不必要的委托可运用Inline Class除掉;

如果函数的某些参数未被用上,可对它实施Remove Parameter;

如果函数名称带有多余的抽象 

手把手教你逆向分析某里系bx-ua参数(以225版本为例) 本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。 阅读详情

相关推荐

wpa_supplicant EAPOL状态机分析

wpa_supplicant EAPOL状态机分析

加油鸭 1476

25种代码坏味道总结+优化示例

前言 什么样的代码是好代码呢?好的代码应该命名规范、可读性强、扩展性强、健壮性......而不好的代码又有哪些典型特征呢?这25种代码坏味道大家要注意啦 1. Duplicated Code (重复代码) 重复代码就是不同地点,有着相同的程序结构。一般是因为需求迭代比较快,开发小伙伴担心影响已有功能,就复制粘贴造成的。重复代码很难维护的,如果你要修改其中一段的代码逻辑,就需要修改多次,很可能出现遗漏的情况。 如何优化重复代码呢?分三种情况讨论: 同一个类的两个函数含有相同的表达式 class A

uuuyy_的博客 1万+

离线安装ambari 更换spark版本 集成carbondate文档

1、Linux系统环境配置 1.1 配置IP地址 vim /etc/sysconfig/network-script/ifcfg-eth0 “DEVICE”:网卡对应的设备别名,如ifcfg-eth0第一块网卡; “HWADDR”:网卡物理地址; “BOOTPROTO”:网卡获得ip地址的方式,Static(静态 ip地址)dhcp(通过dhcp协议获取ip)bootip通过boot...

weixin_44742962的博客 3036

转发:22 种代码坏味道(code smell)

[ Code Smell中文译名一般为“代码异味”,或“代码味道”,它是提示代码中某个地方存在错误的一个暗示,开发人员可以通过这种smell(异味)在代码中追捕到问题。 在计算机编程社区中,code smell代表了任何标志着事物变坏的征兆。它常常标志代码应该被refactored或者全部的设计都应该被reviewed。这个短语出现在 WardsWiki上,它是被Kent Beck杜撰出来的。...

11寸 5646

瑞芯微RK809音频驱动

瑞芯微RV1126中的RK809音频驱动开发

m0_61899715的博客 5221

【Docker安装】OpenEuler系统下部署Docker环境

【Docker安装】OpenEuler系统下部署Docker环境

jks212454的博客 4191

常见的代码坏味道

0. 目录1. Duplicated Code(重复的代码)2. Long Method(过长函数)3. Large Class(过大类)4. Long Parameter List(过长参数列)5. Divergent Change(发散式变化)6. Shotgun Surgery(霰弹式修改)7. Feature Envy(依恋情结)8. Data Clumps(数据泥团)9. Primitive Obsession(基本型别偏执)10. Switch Statements(switch惊悚现身)11.

bigchen 3509

zynq的irq_f2p 如何增加或修改中断引脚个数(宽度)

ZYNQ开发过程中,如果使用PL到PS的中断,会产生一个疑问,设置界面显示可以有[91:84]、[68:61]共16个中断引脚,但是并没有设置中断口的宽度,如果使用多个中断引脚,应该怎么办?如果通过concat连接多个引脚,则自动调整为对应的引脚数。例如连接3个中断信号,则自动调整为:IRQ_F2P[2:0]

FPGA艺术家的博客 837

24种代码坏味道以及其修改手法

1、神秘命名(Mysterious Name) 解决方法 ①改变函数声明 ②变量改名 ③字段改名 2、重复代码(Duplicated Code) ①提炼函数: 同一个类的两个函数含有相同的表达式 ②移动语句: 如果重复代码只是相似而不是完全相同,使用“移动语句”重组代码顺序,把相似的部分放在一起以便提炼 ③函数上移: 重复代码位于同一超类的不同子类中,可以使用“函数上移”来避免在两个子类之间相互调用 3、过长函数(Long Function) ...

qq_36847764的博客 2575

微信公众号 - 解决报错 “err_msg“:“system:access_denied“,微信环境浏览器真机使用微信支付、微信授权登录、分享朋友圈转发好友报错system:access_denied

微信公众号,微信网页,手机h5网页,微信报错,system:access_denied,微信支付,提示报错,微信登录授权报错,微信朋友圈分享,微信转发,WeixinJSBridge,微信环境下,微信内置浏览器,微信公众号项目报错system:access_denied,如何解决,invoke(),API调用后出现报错,微信内部H5 WeixinJSBridge.invoke system:access_denied,使用微信jssdk时报access_denied错误,还是报错,真机运行,真机调试api返回

🏆 前端领域优质创作者 1万+

SAP ABAP 获取采购订单未清数量/在途库存的 6 种方式

这篇文章我总结了获取采购订单未清数量/在途库存的 6 种方式,每种方式的优劣势和适用场景有所不同。读者请结合自身需要选择。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2666

代码的坏味道

“代码的坏味道”是来自Martin Flowler所著《重构 改善既有代码的设计》第三章的title,据作者说这一章来自Kent Beck。我觉得本章是应用重构的重点,因为它告诉我们在看到什么样的代码时就应该思考重构了,下面我就把22种坏味道以我的理解整理了一下。 重复代码(Duplicated Code):分为三种情况,一个类中含有相同的表达式,Extract Method(110),两个互...

鱼获飞的博客 6839

实战:RK3568 Android14 点亮 LVDS 屏幕

4组数据 (D0~D3) + 1组时钟 (CLK)。最大支持 1280x800 @ 60Hz。8组数据 (Even03, Odd03) + 2组时钟。支持 1080P 及以上。/ {/* 背光与电源 *//** 关键配置:数据格式映射* 可选值: "jeida-18", "jeida-24", "vesa-24"* 6位屏选 xx-18, 8位屏选 xx-24* 颜色不对(偏色/底片效果)就换 VESA <-> JEIDA*/

qq_33427070的博客 1165

25种代码坏味道+特征

重复代码就是。一个函数方法几百行甚至上千行。一个类做太多事情,维护了太多功能,可读性变差,性能也会下降。方法参数数量过多。对程序进行维护时,当你实现某个小功能时,你需要在很多不同的类做出小修改。

weixin_43987390的博客 2007

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

重构-改善既有代码的设计之代码的坏味道举例说明

22种坏味道。

Java领域优秀创作者 2816

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【教程】代码的坏味道

本文总结了8种代码坏味道及其改进方法,分为可读性和结构组织两类。可读性问题包括神秘命名(建议重命名)和过度注释(建议提炼函数);结构问题包括重复代码(提炼函数)、过长函数(分解为小函数)、过长参数列表(封装为对象)、冗余元素(内联移除)、过度通用性(简化设计)和过大的类(拆分职责)。每种坏味道都提供了C++代码示例,展示了如何通过重构技术(如重命名、提取函数/类等)改善代码质量,使代码更清晰、可维护且符合单一职责原则。

码的世界 864

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

代码中的坏味道

代码坏味道

凡物加倍磨治,皆能变化气质 1639

识别代码中的坏味道

在前面的文章中,我们介绍了《提升编程效率:重构》以及《何时开始重构?》。了解了那些能够更好的辅助团队或者个人进行重构,但是要让重构真正产生作用是需要能够代码中的坏味道,并消除代码中的坏味道。 如下图是工作中常见的代码的坏味道: 上图中的坏味道出自《重构》这本书,虽然并不是全部,但是涵盖了日常中最常见的一些代码坏味道。 接触这些坏代码可以分为三类: 见名知意的代码坏味道: 稍微解释即可掌握的代码坏味道; 通过一些例子即可掌握的代码的坏味道; 本文主要聚焦在“见名知意的代码坏味道”,后...

godkzz的博客 1003

测试代码的坏味道

测试代码才能真正体现开发人员的水平。追求技术卓越是采用敏捷的第一成功要素。—— Jeff Sutherland 敏捷宣言创始人之一Phodal: “你为什么写测试?”开发人员 A:“为了...

Phodal's zenthink 3945

25种代码坏味道总结

代码坏味道

t194978的博客 1198

24种代码坏味道和重构手法

最近,小李感觉公司女生们看他的眼神不太对劲了,那种笑容好像是充满慈爱的、姨母般的笑容。作为一名老实本分的程序员,小李不太习惯这种被人过度关注的感觉,他不知道发生了什么。······小李和小王的关系似乎过于亲密,还经常挤在一个工位上办公,一直到半夜。这个流言直到某天他们的聊天内容被某个运营小姐姐听到,他们之间的秘密才被大家发现。

mxt51220的博客 1429

代码重构(一)——总结代码的坏味道

《重构-改善既有代码的设计》一书在第三章指出了22种代码的坏味道,下面是我对这些坏味道的总结,分享给大家,还请指正。1. Duplicated Code(重复的代码)重复的代码分三种类型: - 位于同一个类:提炼成新方法进行调用 - 位于不同的子类:提炼成方法放进父类 - 位于完全不相干的类:提炼出一个新的类,将重复代码放进新的类中我们看下面代码,有一个汽车类,要在控制台打印奔驰和宝马的

geniusxi的博客 3861

代码的坏味道与重构技术

前言 本文大部分内容、图片来自Martin Flower的《Refactoring》一书以及refactoringguru网站(一个很棒的网站),之前在博客发表过,这次属于整理后重新发表,以重温经典。 什么是代码的坏味道 通过发霉腐坏的气味隐喻那些在设计上别扭、理解上费劲、维护上困难的问题代码。 代码的各种坏味道 什么是重构 重构是指在不改变代码外部行为的前提下,使代码变得设计简单、干净整洁的方法。 什么是整洁代码 整洁代码设计简单、干净精简、易理解、可测通、好维护。 整洁代码的特征 关于技术债务 重构

字节卷动 2381
上一篇: 多表关联数据
下一篇: SpringBoot+Mybatis
wql_zero
博客等级 码龄9年 0粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值