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

简介: 重构改善既有代码的设计---笔记

在日常的编码过程中,这些知识点可能是非常容易忽视或者由于编码习惯而出差错的地方


软件工程的意义:希望建立完美的需求与设计,按照既有的规编写标准划一的代码,这是结构的美;快速迭代和RAD颠覆“全知全能”神话,用近乎刀劈斧砍的方式解决问题,在混沌的循环往复中实现需求,这是解构的美。


Duplicated Code(重复代码)



  • 程序中两段代码极度类似


  1. 判断是否表达的含义是否一致。


  1. 是否在别的地方进行引用


  1. 将其合并为一个类中的一个函数,通过调用来实现功能简化代码复用。


  • 对于重复代码,需要提炼者认真思考,提炼后的函数放在那个位置更合适,保证函数的唯一性。


Long Method(过长函数)


  • 避免程序中的函数(方法)过长


  1. 短函数对象好理解,容易阅读,美观带来的全部利益:


  1. 解释能力,共享能力,选择能力


  • 设计短函数的原则


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


  1. 关键不在于函数的长度,而在于函数“做什么”、“如何做”之间的语义距离


  • 如何设计短函数


  1. 寻找注释


注释能表达出此函数的具体含义,体现代码用途和实现手法之间的语义距离;

哪怕是在函数中的一句注释,如果此注释只是用来说明的,也有必要将其设计提炼成一个单独的函数


  1. 注意条件表达式和循环程序


Large Class(过大的类)


  1. 注意那些做太多事情的单个类,他们很可能就是过大的类


  1. 有太多的代码


Long Parameter List(过长参数列)


  1. 合理利用对象的概念,并不是函数所需要的所有东西都得通过参数传递,只需要传递它当前所需要或者可以自己获得的东西


  1. 学会使用对象进行参数传递(参数隐藏在对象中,方便后期维护升级)


注意:如果参数列太长或变化太频繁,需要重新考虑自己的依赖关系。



Divergent Change(发撒式变化)



  1. 设计的软件要能够容易修改且修改地方要小。


  1. 针对外界变化所有的修改都只应该发生在某


  1. 一类中,而这个新类内的所有内容都应该反应此变化。


含义:一个类受多种变化的影响



Shotgun Surgery(散弹式修改)


  1. 含义:表示某一处的修改需要修改程序中多处地方。


  1. 把需要修改的代码和函数放到一个类中


Feature Envy(依恋情结)


  1. 由于数据的缘故,一个函数可能依赖很多函数才能正常运行。


  1. 将总是变化的东西放在一起。(数据和引用这些数据的行为总是一起变化的)


  1. 始终保持变化总在一个地方发生


Data Clumps(数据泥团)


  1. 注意寻找那些字段和参数特别多的类,这些就是数据泥团,需要将其进行拆分。


  1. 删除众多数据中的一项,为它们产生一个新的对象。


  1. 减少字段和参数的个数,适当的使用新对象进行调用。


Primitive Obsession(基本类型偏执)


  1. 结构类型允许你讲数据组织成有意义的形式,基本类型则是构成结构类型的积木块。


  1. 对象的价值:模糊了横旦于基本数据和体积较大的类之间的界限。


Switch Statements(switch 惊悚现身)


  1. 利用多态来解决面向过程中的switch语言(switch语句的问题在于重复)


Parallel Inheritance Hierarchies(平行继承体系)


  1. 使用一个继承体系的实例引用另一个继承体系实例


Message Chains(过渡耦合的消息链)


  1. 函数之间多的次嵌套调用,如果一个函数的变量发生变化则很多函数都需要进行变动,牵一发而动全身。


  1. 重构消息链上的任何对象:先观察消息链最终得到的是什么,看能否将多个消息合并到一个独立函数中进行处理。


Middle Man(中间人)


  1. 封装:对外部世界隐藏其内部细节。


目录
相关文章
|
iOS开发
uView的u-datetime-picker限制开始的年月日后ios显示不出来
uView的u-datetime-picker限制开始的年月日后ios显示不出来
718 0
|
9月前
|
存储 缓存 资源调度
前端瘦身革命:告别臃肿的依赖管理
前端瘦身革命:告别臃肿的依赖管理
289 79
|
缓存 监控 前端开发
前端性能优化以及解决方案
前端性能优化关乎用户体验和网站竞争力,包括减少HTTP请求、使用CDN、压缩资源、延迟加载、利用浏览器缓存等策略。制定优化计划,使用监控工具,遵循最佳实践并持续学习,能提升网站速度和稳定性。
478 0
|
机器学习/深度学习 供应链 算法
越过“三重门”,萤石给出了商用清洁机器人的新解法
春节期间,扫地机器人销量同比增长40%,成为年轻人追捧的“电子年货”。然而,商用清洁机器人在写字楼、银行等场所的应用仍依赖人工,尤其在处理复杂污渍时表现不佳。尽管市场需求刚性存在,但商用清洁机器人面临灵活性不足、依赖人工维护及成本高昂等问题,导致商业化进展缓慢。萤石推出的云视觉商用清洁机器人BS1,通过纯视觉方案和自清洁技术,解决了这些问题,大幅提升了清洁效率和自动化水平,降低了运营成本,标志着商用清洁机器人市场正迎来商业化拐点。
287 0
越过“三重门”,萤石给出了商用清洁机器人的新解法
|
Linux Windows
硬盘误删文件还能救?专业数据恢复工具大全
电脑里的硬盘或是移动硬盘都承载着我们日常生活和工作中的重要数据,比如珍贵的照片、关键的工作文件。一旦这种重要资料丢失了,会令人非常焦虑。好消息是,大多数情况下,即便硬盘上的文件被意外删除、分区被格式化,甚至硬盘出现逻辑故障(比如硬盘打不开提示格式化),专业的数据恢复工具仍然能够帮助我们找回丢失的数据。本文会详细介绍一些常见且功能强大的硬盘数据恢复工具,帮助大家选择最适合的解决方案。
|
设计模式 存储 算法
《设计模式:可复用面向对象软件的基础(典藏版)》
本书是埃里克·伽玛著作,涵盖180个笔记,主要介绍面向对象设计模式,包括MVC、设计模式编目、组织编目、实现描述、复用机制、运行时与编译时结构关联、设计支持变化等方面。书中详细解释了23种设计模式,如Abstract Factory、Adapter、Bridge、Builder等,按创建型、结构型、行为型分类,旨在提高软件可复用性和灵活性。
1247 0
《设计模式:可复用面向对象软件的基础(典藏版)》
|
运维 监控 Java
微服务:知识点梳理(SOA、服务拆分、服务治理、分布式事务)
微服务:知识点梳理(SOA、服务拆分、服务治理、分布式事务)
微服务:知识点梳理(SOA、服务拆分、服务治理、分布式事务)
|
小程序 前端开发 Java
java 生成小程序二维码
java 生成小程序二维码
332 0
|
存储 编译器 Linux
深入理解 C 语言中的联合体
深入理解 C 语言中的联合体
|
移动开发 网络协议
HTTP/2 协议(抓包分析 HTTP/2 握手是如何被建立的)
HTTP/2 协议(抓包分析 HTTP/2 握手是如何被建立的)
778 0