博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重构-改善既有代码的设计-代码的坏味道
阅读量:6159 次
发布时间:2019-06-21

本文共 1320 字,大约阅读时间需要 4 分钟。

hot3.png

代码坏的味道:(以下这些现象意味着你该重构了)

        1.Duplicated Code(重复代码)(提炼出公共代码)

        2.Long Method(函数过长)

        3.Large Class(过大的类)

        4.Long Parameter List(过长的参数列表)(可通过ADT来简化参数)

        5.Divergent Change(发散式变化)没有该味道的代码应该是这样(一旦需要修改,我们希望跳到系统的某一点,只在该处修改)

        6.Shotgun Surgery(散弹式修改)(遇到某种变化时,你都必须在许多不同的类内做出许多小修改,要修改的代码遍布四处)

        7.Feture Envy(依恋情节)(如果某个函数为了计算某个值,从另外一个对象调用了几乎半打的取值函数,那么就该考虑吧这个函数移到另外一个地方了。此类问题还有很多例子)

        8.Data Clumps(数据泥团)(2个类中有系统的字段,许多函数相同时,那么就该考虑提炼出类了,把数据的注意力转向函数)

        9.Primitive Obsession(基本类型的偏执)(有时候基本数据类型比ADT更实用)

        10.Switch Statements(面向对象语言明显特征就是 尽量用要用多态来替代switch case)

        11.Parallel Inheritance Hierarchies(平行继承体系)

        12.Lazy Class(冗余类)(如果一个类没多少价值,请去掉吧)

        13.Speculative Generality(夸夸其谈未来性)如果企图各种各样的手法,来处理一些非必要的事情(未来需要用这个东西),那么结果往往造成系统更难维护和理解,慎重考虑

        14.Temporary Field(暂时字段)(如果类中某个变量只是为了某种特殊情况而设,这样的代码不易理解,因为通常认为在类中的变量 所有对象都要需要,请提炼出来)

        15.Message Chains(过度耦合的消息链)(如果看到一个对象请求另外一个对象然后在请求另外一个对象,你可能会见到getThis 或者一长串的临时变量,这种意味着结构紧密耦合,一旦对象间发生变化,那么客户端就不得不变化了。。。解决办法:先观察消息链最终是干嘛,看看能否提炼出独立的函数  等等)

        16.Middle Man(中间人的过度使用)(如果某个类的接口有一般函数都 在委托其他类,那么久应该移除这个类了, 或者变成子对象 )

        17.Inappropriate Intimacy(不恰当的亲密关系)(如果2个类关系太紧密,请慎重考虑这2个类的关系)

        18.Alternative Class With Different Interfaces(异曲同工的类)(如果2个类 或者函数的行为差不多,那么可以考虑提炼,去掉冗余代码)

        19.Data Class(纯粹的数据类)(让他多做点事吧)

        20.Refuse Bequest(被拒绝的遗赠)(在继承体系中,如果子类只具备父类部分特性,或者部分函数,那意味着这个继承体系是错误的,特别是 抽象超类)

 

 

 

 

转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/675436

你可能感兴趣的文章
Wait Functions
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
jquery用法大全
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
STM32启动过程--启动文件--分析
查看>>