达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心 达内广州C++学院|c++培训|广州达内科技C++/C#培训|.NET培训|IT培训|达内广州岗顶中心
达内新闻
 当前位置:主页 > 达内新闻 >

程序员如何识别和处理代码中坏掉的部分

时间:2020-05-19  来源:未知  作者:广州达内培训

对于程序员来说,代码优化是一个无止境的工作内容,而今天我们就通过案例分析来了解一下,如何识别代码中的不好的部分,下面就一起来了解一下具体情况吧。

程序员如何识别和处理代码中坏掉的部分

1.重复代码

简单的复制/粘贴,或者无意间添加了相同逻辑的代码都是有可能的导致重复代码出现的。

那么为什么重复的代码是一种坏味道?

明显的就是重复的代码容易造成修改时的遗漏,修改遗漏导致一个问题需要修改多次才能才能确定终修改完成。如果有一部分修改了,另外一部分没有修改且没有被发现,日后再遇到感觉类似,实则不同的代码会花费大量的时间确定业务上的需求,实现上应该如何处理。

重复代码这类坏味道产生的成本很低,但是带来的影响却是很大。

如何解决重复代码问题?

SimpleDesign为我们提供了参考参考原则:“通过测试,揭示意图,消除重复,少元素”。

如果重复代码发生在一个类中,且两段代码完全重复,可以借助ExtractMethod(提炼函数)这个重构手法来消除重复;提炼函数时IDE一般都会自动提示是否同时修改重复的代码,减少重构的工作量。

如果重复代码发生在一个类中,且两段代码之后部分重复。那么可以将部分重复的代码通过ExtractMethod的手法,提炼到单独的方法中,并替换掉部分重复的代码。

如果重复的代码在不同的类中,且这些类是兄弟类,可以使用PullUpMethod,将重复的代码提炼到父类,并让原本的类继承父类。

如果重复的代码在不同的类中,且这些类之间关联性不大,那么可以ExtractClass,将重复的挪动到一个新的类中,原本出现重复的地方来调用这个新产生的类的方法。

消除重复之后,检测代码表达的意图是否准确、完成,ExtractMethod时可以通过良好的方法名来解释提炼的函数的作用和意图。

2长函数

顾名思义,长度过长的函数。其中包括两种情况,横向过长,纵向过长。

为什么长函数是一种坏味道?

横向过长时,往往一眼无法快速了解该行代码要表达的意思和中间的过程。当出现Bug定位问题时也不容易一次性定位到问题所在。

纵向过长时,往往会感觉某个函数内部逻辑复杂、晦涩难懂。修改代码中也会因为无法照顾到要修改的方法中的其他行代码,而顾此失彼,终导致难度难修改。经过多次修改后甚至原有的基本结构都会遭到破坏,导致后续修改难度逐渐增加。

3过大的类

顾名思义就是一个类做了太多的事情。SOLID原则告诉我们类的职责应该是单一的,而一个过大类很可能意味着承担了多个/多类职责。

过大的类为什么是一种坏味道?

由于过大的类承担了过多的职责,很容易导致重复代码且重复代码不容易被发现,而这往往是坏味道的开始。

如果过大的类对外提供服务发生了变动,并不容易快速响应这样的变化,可以对比一下一个小而职责单一的类中进行修改方便还是在多很多职责。

当过大的类因为某个地方发生变化,很可能导致不相关的调用方的代码也会发生变化,这是一种耦合性的表现。

当过大的类被继承时很可能导致其他的坏味道,例如遗留的馈赠。

因此,保持小而职责单一的类将会对系统的设计有很大的帮助。当然也可以参考SimpleDesign,避免过度设计的前提下保持简单的设计。

如何解决过大的类的代码坏味道?

观察这个过大的类的属性,看是否有关联的几个属性能够代表一定的业务意思,如果可以使用ExtractClass,将这几个属性挪动到一个新的类中,并将相关操作挪动到新的类中。循环往复,这样一个大的类能够拆分成多个小的且职责较为单一的类。

观察这个大类中的方法,看是否存在兄弟关系的方法,如果有可以使用ExtractSubclass(提炼子类)的方法,将相关方法提炼到子类中,并考虑使用继承父类还是面向接口使用ExtractInterface(提炼接口)。这样相似行为的行为聚集在一个类中,拆分到多个类中,并可以进一步和方法的调用发来解耦。

进一步观察剩余类的行为,如果这些行为在处理一类事情,那么可以停止了,在处理多类事情,可以按照处理逻辑的类型进一步拆分。

简而言之,使用一个亘古不变的法则:分治法。将过大的类,拆分成多个职责单一的小类,手段是ExtractClass,ExtractSubclass,ExtractInterface。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请在707945861群中学习了解。




上一篇:浏览器多进程架构的特点和优势都有哪些
下一篇:没有了

友情链接:
  • 全球最大晶圆代工半导体制造厂,台积电斥资订购艾斯摩尔机器设备
  • 英特尔依然是那个英特尔,且看英特尔的城防体系
  • 支持双 DRAM 内存接口,慧荣企业级 SSD 主控方案披露
  • 在全球被反垄断罚款,冤!高通到底哪里得罪了欧盟?
  • 强强联合!万业、微电子所和芯鑫共同打造全新半导体设备
  • 复旦大学校长称:对于集成电路产业发展,大学应该主动担当
  • 技术再升级!无锡中科芯攻克晶圆级再布线及晶圆级凸点制备关键技
  • 聚力!万业企业设立集成电路装备集团,提供自主可控设备
  • 德州仪器C2000微控制器增强连通性和控制性
  • 英特尔打出降价策略,以免被竞争对手 AMD 打败?
  • 贸易摩擦的闹剧没有赢家,苹果有勇气离开中国吗?
  • 图像信号与视觉处理器的发展趋势
  • 真干快消品定位方案班(第二期)火热开班
  • Java集合 ArrayList原理及使用
  • TDD(测试驱动开发)死了吗?
  • JAVA基础之XML相关
  • javaweb项目搭建ehcache缓存系统
  • 每日一码——字符串统计
  • 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
  • 九:模板方法模式
  • 十二:命令模式(人员解耦和)
  • Java 转PPT为图片、PDF、SVG、XPS、ODP以及PPT和PPTX互转
  • SpringCloud学习(SPRINGCLOUD微服务实战)一
  • 记一次微信网页授权后获取用户信息并重定向
  • 速途新营销五点实战洞察解码“品效合一”
  • 十一:外观模式详解(Service,action与dao)
  • 手把手教你学会 基于JWT的单点登录
  • mysql锁机制总结,以及优化建议
  • 解决多个版本jar包冲突【jar内包名重命名】
  • 中国首张5G终端电信设备进网许可证 华为Mate 20 X 5G版入网
  • RPC之Thrift
  • 高级Java工程师必备 ----
  • 天猫618期间实物支付GMV增长38.5%
  • 换季了,老板你的库存处理好了吗?
  • 从“618”大数据看中国消费新活力
  • 小米生态链:贵在格局感与收放度
  • CODING 2.0 企业级持续交付解决方案
  • 老铁奇趴“新京济” 快手*京东618战报出炉
  • 中小企业新媒体运营基本技能
  • 上汽大通房车再度携手LINE FRIENDS 魔都巡游顺利开启
  • 华为高端手机国内市场份额超苹果夺得榜首
  • 中国智能制造分析报告
  • iPlus艾加营销助力腾讯广告牵手吴晓波 推进商业IP变现
  • 2019世界新能源汽车大会7月1日将在海南举行
  • 区域酒企如何转型突围
  • 时时彩论坛
  • 五星体育斯诺克
  • 北单比分直播
  • 河北11选5走势图
  • 福建体彩36选7开奖结果
  • 九龙图库下载