重构,改善既有代码的设计

重构-改善既有代码的设计 pdf 阅读详情

本系列是用来记录《重构,改善既有代码的设计》这本书的读书笔记。方便自己查看,也方便大家查阅。

欲速则不达,欲达则欲速!

重构,绝对是写程序过程中最重要的事之一。在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改的面目全非了。更何况,我们很少有机会从到到尾完成一个项目,基本上都是接手别人的代码,即使这个项目从头到尾参与,也有可能接手其它组员的代码。我们都有这样的经验,看到别人的代码时感觉就像屎一样,有一种强烈的想重写的冲动,但一定要压制住这种冲动,完全重写,可能比原来好一点,但浪费时间不说,还有可能引入原来不存在的bug,而且,你不一定比原来设计的好,也许原来的设计考虑到了一些你没考虑到的情况。我们写的代码,终有一天也会被别人接手,很有可能到时别人会有和我们现在一样的冲动。所以,我们要做的重构,从小范围的重构开始。

重构不只是可以改善既有的设计,还可以帮助我们理解原来很难理解的流程。比如一个复杂的条件表达式,我们可能需要很久才能明白这个表达式的作用,这时候,抽象出来,起一个易于理解的名字,函数名字很重要,下次再见到的时候,自然知道当初的想法了,好的代码胜过注释,毕竟注释有可能更新的不是很及时。

《重构,改善既有代码的设计》,这是一本经典之作,看过这本书要收获的是,让重构融入整个写代码的过程中,让重构不再作为一项独立的任务,而是在写代码的过程中随时随地的进行,一个函数不容易理解,重构;添加新功能时很不方便,重构。

定义

对软件内部结构的一种调整,使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构,提高其可理解性,降低其修改成本。

为何重构
  • 重构改进软件设计:原来的设计不可能考虑到所有的情况,随意添加功能修改东西,可能已经看不出原本的设计了
  • 重构使软件更容易理解
  • 重构帮助找到bug:重构可以增加对代码的理解,从而容易发现bug
  • 重构提高编程速度:重构虽然花费时间,但是重构可以改善程序的设计,使程序更不容易出现bug,使添加新特性更容易
何时重构无须专门拨出时间进行重构,重构应该随时随地进行,事不过三,三则重构,当添加新功能时如果不是特别容易,可以通过重构使添加新特性更容易,修补错误时重构可以更容易发现bug,复审代码也是重构的好时机
代码的坏味道
  • 重复代码
  • 过长函数
  • 过大的类
  • 过长参数列
  • 发散式变化:一个类受多种变化的影响
  • 散弹式修改:一种变化引发多个类响应修改
  • 依恋情结:函数对某个类的兴趣高过对自己所处类的兴趣,是时候考虑这个函数到底应该放在什么位置了
  • 数据泥团:两个类中相同的字段,许多函数中相同的参数,这时候就可以让他们拥有自己的类了,简而言之,类似的东西写一个类里
  • 基本类型偏执:编写小对象,如表示范围的range
  • switch惊悚现身:switch带来重复,同样的switch语句经常散布于不同的地址,如果要加一个新的case子句,就必须找到所有switch语句并修改他们
  • 平行继承体系:每当你为某个类增加一个子类,必须也为另一个类增加一个子类,大多数时候你会发现,某个继承体系的类名前缀和另一个继承体系的类名前缀完全相同,是时候分离为两个继承体系了
  • 冗赘类:没啥用的类就应该干掉
  • 夸夸其谈的未来性:无用的抽象类,无用的预留参数
  • 令人迷惑的局部变量
  • 过度耦合的消息链:函数过大时,就应该提取函数
  • 中间人:无用的委托,过多中间层
  • 异曲同工的类:不同的类或函数,干相同的事,写一个不好吗
  • 过多的注释:如果一个函数需要过多的注释,是时候重构了,把代码当注释,好的名字就是注释
重构组织函数
  • 提炼函数:代码粒度越小越容易重用,而且这部分代码被组织到一起后,可以起一个易于理解的名字解释其意图。要注意临时变量的处理
  • 内联函数:对于一些函数,可能其实现和名字一样容易理解,没必要再封装一层;或者一些没必要的中间层都可以去掉,java中用final修饰,C++中用inline修饰,c#中没有内联函数,也许微软认为C++才需要关心性能,而C#关注快速开发,不必理会这些开销吧。
  • 内联临时变量:你有一个临时变量,只被一个简单表达式赋值一次,而它妨碍了其它重构手法
  • 以查询取代临时变量:应减少定义临时变量,如程序以一个临时变量保存某一表达式的运算结果并作为方法的返回值,直接用表达式作为返回结果就算了
  • 引入解释性变量:有时候也会遇到非常复杂的表达式,定义一个临时变量,解释其用途也是可以的
  • 分解临时变量
  • 移除对参数的赋值:不要对函数传进来的参数赋值
  • 建立新的类取代函数:有一个大型函数,这个函数有太多的临时变量,以至于不能重构,这时就可以另起炉灶,新建一个类,原来函数的参数就变成了新的类成员,可以方便的对新的勒种响应的函数进行各种重构。
  • 替换算法:将两个方法中相同的部分,提取出来
在对象之间搬移特性
  • 搬移函数:类中的一个函数使用另一个类的对象的次数比使用自己所在类的对象的次数还要多,很有可能这个函数定义错地方了
  • 搬移字段
  • 提炼类
  • 内联类
  • 隐藏委托关系:有时调用一个对象的方法时获得另一个对象,然后再调用获得对象的一个方法获得另一对象,如此反复,此时可以直接调用第一个对象再加一个方法直接返回最终对象
  • 移除中间人
重新组织数据
  • 自封装数据:为字段建立赋值取值函数
  • 以对象取代数据值:有一个数据项,可能需要对这个数据项添加一个行为,把这个数据项封装为一个类
  • 将值对象改为引用对象
  • 将引用对象改为值对象:对象不好控制时改为不可变的值对象,这样就不用了考虑同步的问题了。
  • 以对象取代数组:一个数组中的不同元素表示不同的东西,不容易理解
  • 复制“被监视数据”:主要针对GUI中的数据,实现UI与逻辑分享,MVC,将V中的数据复制到M中,并在M中数据变化时通过listener进制或observer弄死同步更新UI
  • 封装字段:public改为private,提供相应的访问函数
简化条件表达式
  • 分解条件表达式:有一个复杂的条件表达式,将if条件,then、else中的三个段落全部提取出独立函数以方便理解
  • 合并条件表达式
  • 合并重复的条件判断:在条件表达式的每个分支上有着相同的一段代码,把这段代码搬移到条件表达式之外
  • 移除控制标记:不用通过控制标记来决定是否退出循环或跳过函数剩下的操作,直接break或return
  • 以卫语句取代嵌套表达式:如果某个条件不常见,应该单独检查该条件,这种操作成为卫语句
  • 以多态取代条件表达式
  • 引入null对象
  • 引入断言
简化函数调用
  • 函数改名:好的函数名字很重要,名字起得好可以看出函数具体是做什么的,对于理解复杂逻辑非常有帮助
  • 添加参数
  • 移除参数
  • 将查询函数和修改函数分离
  • 令函数携带参数
  • 以明确函数取代参数:有一个函数,其中完全取决于参数值而采取不同的行为,针对该参数的每一个可能性,建立一个单独的函数
  • 引入参数对象:某些参数总是同时出现,先建一个变量取代这些参数,减少参数的数量
  • 移除赋值函数:如果类中的某个应该在对象创建时被赋值,此后不再改变,不要添加赋值函数
  • 隐藏函数:有一个函数从来没有被其它类用到,或者本来被用到,但随着类添加接口,之后就用不到了,那么隐藏这个函数,也就是减小作用域
  • 封装向下转型:如果返回的值一定需要调用者转型,那么最好在函数中完成转型动作
  • 以异常取代错误码
  • 以测试取代异常:异常只应该被用于异常的、罕见的、意料之外的行为,不应该作为条件检查用
处理概括关系
  • 字段上移:连个子类拥有相同的字段,将该字段移至父类消除重复
  • 函数上移:有些函数在各个子类中产生相同的结果,上移至父类消除重复并方便修改
  • 构造函数本体上移
  • 函数下移
  • 字段下移
  • 提炼子类
  • 提炼父类:两个类有相似的特性,为这两个类建立一个父类,将相同特性移至父类
  • 体连接口
  • 折叠继承体系:父类与子类无太大区别,之前没考虑明白,消除继承关系,合并在一起
  • 塑造模板函数
  • 以委托取代继承:某个子类只使用父类接口中的一部分,将父类作为子类的一个字段,消除继承关系
  • 以继承取代委托:一个类的行为基本上都是委托另一个类,当另一个类接口改变时也要同时修改委托类,直接继承省事方便
大型重构
  • 梳理并分解继承体系:某个继承体系同时承担两项责任,建立两个继承体系,并通过委托关系让其中一个调用另一个
  • 将过程化设计转化为对象设计
  • 将领域和表述/显示分离
  • 提炼继承关系:某个类做了太多的事情,其中一部分工作是以大量条件表达式完成的,建立继承体系,以一个子类表示一种特殊情况

 

鸣谢:特别感谢作者Martin Fowler提供的技术支持!

《重构 改善既有代码的设计》读书笔记及心得体会 《重构 改善既有代码的设计》读书笔记及心得体会第一章 重构 第一个案例 重构的第一步,为即将修改的代码建立一组可靠的测试环境。 过程和方法对于项目的结果只有次要的影响,首要的影响是人 没有可靠的测试环境就不要进行代码的重构,那么问题来了: - 什么是可靠的测试环境? 在第四章给出回答 重构时,每次修改的幅度要小,这样便于进行测试发现错误。 这是本书中贯穿始终的 阅读详情

相关推荐

重构:改善既有代码的设计(一)

重构:改善既有代码的设计(一)

不甘于平凡的溃败的博客 1391

重构 :改善既有代码的设计

笔记,回顾

DuGuYiZhao的博客 3876

重构-改善既有代码的设计

第1章 重构,第一个案例 1 1.1 起点 1 1.2 重构的第一步 7 1.3 分解并重组statement() 8 1.4 运用多态取代与价格相关的条件逻辑 34 1.5 结语 52 第2章 重构原则 53 2.1 何谓重构 53 2.2 为何重构 55 2.3 何时重构 57 2.4 怎么对经理说 60 2.5 重构的难题 62 2.6 重构与设计 66 2.7 重构与性能 69 2.8 重构起源何处 71 第3章 代码的坏味道 75 3.1 Duplicated Code(重复代码) 76 3.2 Long Method(过长函数) 76 3.3 Large Class(过大的类) 78 3.4 Long Parameter List(过长参数列) 78 3.5 Divergent Change(发散式变化) 79 3.6 Shotgun Surgery(霰弹式修改) 80 3.7 Feature Envy(依恋情结) 80 3.8 Data Clumps(数据泥团) 81 3.9 Primitive Obsession(基本类型偏执) 81 3.10 Switch Statements(switch惊悚现身) 82 3.11 Parallel InheritanceHierarchies(平行继承体系) 83 3.12 Lazy Class(冗赘类) 83 3.13 Speculative Generality(夸夸其谈未来性) 83 3.14 Temporary Field(令人迷惑的暂时字段) 84 3.15 Message Chains(过度耦合的消息链) 84 3.16 Middle Man(中间人) 85 3.17 Inappropriate Intimacy(狎昵关系) 85 3.18 Alternative Classes with Different Interfaces(异曲同工的类) 85 3.19 Incomplete Library Class(不完美的库类) 86 3.20 Data Class(纯稚的数据类) 86 3.21 Refused Bequest(被拒绝的遗赠) 87 3.22 Comments(过多的注释) 87 第4章 构筑测试体系 89 4.1 自测试代码的价值 89 4.2 JUnit测试框架 91 4.3 添加更多测试 97 第5章 重构列表 103 5.1 重构的记录格式 103 5.2 寻找引用点 105 5.3 这些重构手法有多成熟 106 第6章 重新组织函数 109 6.1 Extract Method(提炼函数) 110 6.2 Inline Method(内联函数) 117 6.3 Inline Temp(内联临时变量) 119 6.4 Replace Temp with Query(以查询取代临时变量) 120 6.5 Introduce Explaining Variable(引入解释性变量) 124 6.6 Split Temporary Variable(分解临时变量) 128 6.7 Remove Assignments to Parameters(移除对参数的赋值) 131 6.8 Replace Method with Method Object(以函数对象取代函数) 135 6.9 Substitute Algorithm(替换算法) 139 第7章 在对象之间搬移特性 141 7.1 Move Method(搬移函数) 142 7.2 Move Field(搬移字段) 146 7.3 Extract Class(提炼类) 149 7.4 Inline Class(将类内联化) 154 7.5 Hide Delegate(隐藏“委托关系”) 157 7.6 Remove Middle Man(移除中间人) 160 7.7 Introduce Foreign Method(引入外加函数) 162 7.8 Introduce Local Extension(引入本地扩展) 164 第8章 重新组织数据 169 8.1 Self Encapsulate Field(自封装字段) 171 8.2 Replace Data Value with Object(以对象取代数据值) 175 8.3 Change Value to Reference(将值对象改为引用对象) 179 8.4 Change Reference to Value(将引用对象改为值对象) 183 8.5 Replace Array with Object(以对象取代数组) 186 8.6 Duplicate Observed Data(复制“被监视数据”) 189 8.7 Change Unidirectional Association to Bidirectional(将单向关联改为双向关联) 197 8.8 Change Bidirectional Association to Unidirectional(将双向关联改为单向关联) 200 8.9 Replace Magic Number with Symbolic Constant(以字面常量取代魔法数) 204 8.10 Encapsulate Field(封装字段) 206 8.11 Encapsulate Collection(封装集合) 208 8.12 Replace Record with Data Class(以数据类取代记录) 217 8.13 Replace Type Code with Class(以类取代类型码) 218 8.14 Replace Type Code with Subclasses(以子类取代类型码) 223 8.15 Replace Type Code with State/Strategy(以State/Strategy取代类型码) 227 8.16 Replace Subclass with Fields(以字段取代子类) 232 第9章 简化条件表达式 237 9.1 Decompose Conditional(分解条件表达式) 238 9.2 Consolidate Conditional Expression(合并条件表达式) 240 9.3 Consolidate Duplicate Conditional Fragments(合并重复的条件片段) 243 9.4 Remove Control Flag(移除控制标记) 245 9.5 Replace Nested Conditional with Guard Clauses(以卫语句取代嵌套条件表达式) 250 9.6 Replace Conditional with Polymorphism(以多态取代条件表达式) 255 9.7 Introduce Null Object(引入Null对象) 260 9.8 Introduce Assertion(引入断言) 267 第10章 简化函数调用 271 10.1 Rename Method(函数改名) 273 10.2 Add Parameter(添加参数) 275 10.3 Remove Parameter(移除参数) 277 10.4 Separate Query from Modifier(将查询函数和修改函数分离) 279 10.5 Parameterize Method(令函数携带参数) 283 10.6 Replace Parameter with Explicit Methods(以明确函数取代参数) 285 10.7 Preserve Whole Object(保持对象完整) 288 10.8 Replace Parameter with Methods(以函数取代参数) 292 10.9 Introduce Parameter Object(引入参数对象) 295 10.10 Remove Setting Method(移除设值函数) 300 10.11 Hide Method(隐藏函数) 303 10.12 Replace Constructor with Factory Method(以工厂函数取代构造函数) 304 10.13 Encapsulate Downcast(封装向下转型) 308 10.14 Replace Error Code with Exception(以异常取代错误码) 310 10.15 Replace Exception with Test(以测试取代异常) 315 第11章 处理概括关系 319 11.1 Pull Up Field(字段上移) 320 11.2 Pull Up Method(函数上移) 322 11.3 Pull Up Constructor Body(构造函数本体上移) 325 11.4 Push Down Method(函数下移) 328 11.5 Push Down Field(字段下移) 329 11.6 Extract Subclass(提炼子类) 330 11.7 Extract Superclass(提炼超类) 336 11.8 Extract Interface(提炼接口) 341 11.9 Collapse Hierarchy(折叠继承体系) 344 11.10 Form Tem Plate Method(塑造模板函数) 345 11.11 Replace Inheritance with Delegation(以委托取代继承) 352 11.12 Replace Delegation with Inheritance(以继承取代委托) 355 第12章 大型重构 359 12.1 Tease Apart Inheritance(梳理并分解继承体系) 362 12.2 Convert Procedural Design to Objects(将过程化设计转化为对象设计) 368 12.3 Separate Domain from Presentation(将领域和表述/显示分离) 370 12.4 Extract Hierarchy(提炼继承体系) 375 第13章 重构,复用与现实 379 13.1 现实的检验 380 13.2 为什么开发者不愿意重构他们的程序 381 13.3 再论现实的检验 394 13.4 重构的资源和参考资料 394 13.5 从重构联想到软件复用和技术传播 395 13.6 小结 397 13.7 参考文献 397 第14章 重构工具 401 14.1 使用工具进行重构 401 14.2 重构工具的技术标准 403 14.3 重构工具的实用标准 405 14.4 小结 407 第15章 总结 409

重构 - 改善既有代码的设计

内联函数目的:将意图与实现分开。意图 == 主干;实现 == 分支的实现场景:如果需要花时间浏览一段代码才能弄清它到底干什么,那么就应该将其提炼到一个函数中,并根据它所做的事为其命名。以后再读到这段代码时,可以一眼就能知道函数的用途,大多数根本不需要关心函数如何实现。

梦心之魂的博客 1719

重构--改善既有代码的设计 文字版 epub格式

重构--改善既有代码的设计 文字版 epub格式

EPLAN二次开发实战:从API接口到定制化功能的完整指南

本文为电气工程师和自动化设计师提供了一份EPLAN二次开发的完整实战指南。文章详细介绍了从脚本、插件到独立程序三种开发模式,重点讲解了如何使用C#或VB.NET通过API接口操作EPLAN数据模型,实现定制化功能以提升设计效率,并分享了开发环境搭建、调试及项目打包分发的避坑经验。

c6d7e8f9g的博客 1115

[重构] 改善既有代码的设计

在做微服务拆分相关的课题,会涉及到模块化重构和代码重构相关的东西,重构的速度和质量很大程度上取决于代码原本质量的好坏,所以看了一下这本书,有些知识点我也不知道,所以摘抄了其中比较重要的部分规则。 文章目录重构——改善既有代码的设计序前言第1章 重构,第一个案例第2章 重构原则第3章 代码的坏味道第4章 构筑测试体系第5章 重构列表第6章 重新组织函数第7章 在对象之间搬移特性第8章 重新组织数据第...

Blanchedingding的博客 688

使用ExcelJS向XLSX单元格居中插入图片

本文记录了使用ExcelJS库向XLSX单元格里居中写入图片的方法。本文内容包括:xlsx 文件格式;xlsx 图片定位的长度单位;使用nativeColOff和nativeRowOff进行定位,不要使用官网给的定位方式;添加图片到数据表的总体流程和样例代码;注意事项等。

weixin_43678000的博客 3454

《重构 改善既有代码的设计》之重构列表

1 简介 春节期间,自己也没有阅读其他的书籍,一方面是因为家里没有空调,读书写字时很冷,另外一方面就是灯光不亮,看书时很累眼睛,最后就是在家里总是无聊,心很浮躁,静不下来学习,所以也没有看其他的书籍。 在阅读完《重构 改善既有代码的设计》自己陆续写了一些博客,当然,很多时候只是一种整理,也可以说是一种变相的温故而知新吧。 读完本书时,有一些重构手法给我留下了很深刻的印象,诸如在重新组织函数节的Ex...

不当初 1162

ArcMap 10.7/10.8启动加载界面后闪退?可能是这个隐藏的Normal.mxt模板文件在搞鬼

本文深入分析了ArcMap 10.7/10.8启动加载界面后闪退的问题,指出Normal.mxt模板文件损坏是常见原因。提供了从定位、删除模板文件到系统级修复的完整解决方案,帮助GIS工程师快速恢复工作流程。

weixin_28523493的博客 328

Meta-World环境实战解析:pick-place-v2中的状态观测与动作控制

本文深入解析了Meta-World中pick-place-v2环境的强化学习实战要点。文章详细拆解了39维状态观测向量的构成与意义,包括机械臂末端、物体位置及目标坐标,并揭示了默认部分可观测设置的潜在影响。同时,阐述了4维动作空间的控制逻辑与奖励函数的分阶段设计,为训练高效稳定的抓放策略提供了核心指导与实用调优技巧。

weixin_29184371的博客 75

《重构 改善既有代码的设计》中文高清完整版pdf下载

《重构 改善既有代码的设计》中文高清完整版pdf下载 【下载地址】重构改善既有代码的设计中文高清完整版pdf下载 《重构 改善既有代码的设计》是一本经典之作,深入浅出地讲解了如何通过重构优化既有代码。本书不仅揭示了重构的核心原理,还提供了70多个经过验证的重构案例,帮助读者掌握实用的代码变换技巧。通过逐步重构的方式,开发...

gitblog_06788的博客 1383

从DCI-P3到sRGB:跨媒体色彩转换的矩阵奥秘与实践

本文深入解析从DCI-P3到sRGB的色彩空间转换技术,揭示矩阵运算的核心原理与实践技巧。通过实战案例展示如何正确处理白点差异、伽马曲线转换等关键环节,帮助影视从业者解决跨媒体色彩匹配问题,确保作品在不同设备上呈现一致的视觉效果。

weixin_28709649的博客 326

重构-改善既有代码的设计 读书心得(一)

目录《重构-改善既有代码的设计》第一章第二章第三章 代码的坏味道第六章 重新组织函数 《重构-改善既有代码的设计》 这本书有些“年纪”了,按理说it界的书都是读新不读旧。但它有点特别,其中的关于重构和面向对象的思想我觉得放到现在也是不过时的。好多时候我们考察一个程序员,都是看他懂多少东西,知道多少概念,做过什么项目,但其实一个程序员最关键的素质是要写出好的代码。好的代码不是一天炼成,往往都要经过大...

yes1983的专栏 1802

Mplus实战:三变量随机截距交叉滞后模型(RI-CLPM)语法详解与扩展

本文详细解析了Mplus中三变量随机截距交叉滞后模型(RI-CLPM)的构建原理与语法实现。通过将变量分解为稳定的个体间差异与动态的个体内波动,模型能更纯净地揭示多变量间的纵向交互影响。文章以工作压力、睡眠质量与工作满意度为例,提供了完整的语法模板、关键参数设置(如NOCOV命令、残差相关)及结果解读指南,帮助研究者避开常见误区,稳健分析复杂动态关系。

wdx0123456的博客 925

C语言读取CSV文件的方法1

逗号分隔值文件格式(CSV),以纯文本形式存储表格数据,它是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。本文介绍利用C语言标准库中的一个字符串处理函数 strtok()来对CSV文件内容进行读取的基本方法

白马负金羁 1万+

读《重构:改善既有代码的设计》的思考

重构不是一个一蹴而就的事,需要长期的实践和经验才能够完成得很好。我们重构强调的是 使代码变得更好,拥有代码洁癖。

简单猿 2662

petalinux2022.2启动文件编译配置

petalinux2021之前的版本里,导入目录components/yocto/下的“environment-setup-aarch64-xilinx-linux” 和 “layers/core/oe-init-build-env”的环境,能使用Yocto的devtool工具。(加入下面内容,先petalinux-build下载完成后才能有源码)制作 BOOT.BIN 启动文件:petalinux-package --boot --fsbl --fpga --u-boot --force。

wangjie36的博客 1382

重构_改善既有代码的设计_第二版(Java代码示例)

前言 最近在读《重构_改善既有代码的设计(第2版)》这本书,一本非常经典,并且非常容易读懂的书,强力推荐刚入职场或未入职场的同学去读,书中的代码示例是用JavaScript来编写的,该文只是将书中的代码示例翻译成Java版本,并不会复制书中过多的内容,其中一些做法并不完全相同,加了自己的风格或者是说一些浅显的理解,非常欢迎各位批评和指正。 第一个示例 示例需求: 设想有一个戏剧演出团,演员们经常要...

a5f4s6f4a65f4a6sf的博客 6024

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

《重构 改善既有代码的设计》之代码的坏味道

1 简介 知道“如何”不代表知道”何时”。决定何时重构、何时停止和知道重构机制如何运转一样重要。 从我们的经验来看,没有任何量度规矩比得上一个见识广博者的直觉。我们智慧告诉你一些迹象,它会指出“这里有一个可以用重构解决的问题”。你必须培养出自己的判断力,学会判断一个类内有多少实例变量算是太大,一个函数内有多少代码才算太长。 2 坏味道列表 2.1 重复代码Duplicated Code 如果你在...

不当初 1561

老版QQ原生表情gif动态

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

【免费下载】 重构改善既有代码的设计第2版 PDF 下载

重构改善既有代码的设计第2版 PDF 下载 【下载地址】重构改善既有代码的设计第2版PDF下载 - **文件名**: 重构改善既有代码的设计第2版.pdf- **文件类型**: PDF- **文件大小**: [文件大小]- **适用人群**: 软件开发人员、架构师、项目经理等 ...

gitblog_06697的博客 1579

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

图书推荐4:《重构:改善既有代码的设计》

如果你是一名软件开发人员,那么《重构:改善既有代码的设计》这本书绝对值得你学习和研究。首先,重构是一项非常重要的技能,它可以使得代码更加清晰、易读、可维护和高效。而在实践中,很多开发者往往只关注代码的功能性,而忽略了代码的质量和可维护性,从而导致后期的维护、升级和扩展变得异常困难。

madifu的博客 1035

《重构,改善既有代码设计》精读

人们只为了短期目的而修改代码时,往往没有完全理解整体的架构设计(在大项目中常有这种情况,比如在不同的地方,使用完全相同的语句做着同样的事情),代码就会失去自己的结构,代码结构的流失具有累积效应,越难看出代码所代表的设计意图,就越难保护其设计。并且自己编写的代码往往带有自己的风格和“坏习惯”,代码风格并不是一种错误,但在一个团队中,不同代码风格的混杂会带来阅读与合作的困难,而对于“坏习惯”而言,比如极其复杂的条件判断语句等,自己难以意识到该做法的不妥,需要群众的意见加以改正。

m0_60534883的博客 224

《重构,改善既有代码的设计》读书笔记

重构,绝对是写程序过程中最重要的事之一。在写程序之前我们不可能事先了解所有的需求,设计肯定会有考虑不周的地方,而且随着项目需求的修改,也有可能原来的设计已经被改得面目全非了。更何况,我们很少有机会从头到尾完成一个项目,基本上都是接手别人的代码,即使这个项目是从头参与的,也有可能接手其他组员的代码。我们都有过这样的经验,看到别人的代码时感觉就像屎一样,有一种强烈的想重写的冲动,但一定要压制住这种冲动

AngelDevil的专栏 852

《重构-改善既有代码的设计》第一版

简介 重构的前提:先构建安全网,然后在不改变功能外在行为的前提下重构。 重构的心法:旧的不变,新的创建,一步切换,旧的再见。 代码坏味道列表 有些重构手法没有包含在这份列表中。 Duplicated cod 重复代码 重构方式 Extract Method:同一个类中有重复代码,则提取公共函数; Extract Class:如果某个类做了应该由两个类做的事情,那么创建一个新类,将相关的字段和函数...

总结、分享、交流 1733
上一篇: Java框架总结
下一篇: 设计模式23模式介绍
哪 吒
哪 吒 2022年度博客之星TOP 1 2022年度博客之星TOP 1 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 59万+粉丝 2933原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值