大话重构
本书属于略读、跳读型书籍,了解大概内容即可。需要在实践中反复运用书中的建议才能够掌握知识。
相似书籍
有时间可以本书为基础做一次主题阅读
目录
- 基本概念
- 系统重构的六大步骤
基本概念
什么是系统重构?
系统重构就是,在不改变软件的外部行为的基础上,改变软件内部的结构,使其更加易于阅读、维护和变更。
系统重构,应该尽量避免大设计,而尽量采用一个一个连续不断的小设计。也称为“小步快跑模式“。
其中的蕴涵了敏捷编程的思想:简单与快速反馈。
修改软件的四个动机
- 增加新功能
- 原有功能有 BUG
- 改善原有程序结构
- 优化原有系统功能
什么是重构?
重构的过程就像在做数学题,一步一步地进行等量变换。在重构的过程,需要保持系统外部行为对应的现有结果保持不变性。
在进行重构之间,应该用完善的测试保证重构前后系统行为对相同输入的一致性。
- 简单重构:增加注释、调整顺序、重命名变量、进行分段
- 抽取方法与类
什么时候重构?
- 先重构,再扩展
- 先重构, 再复用
修改代码的两个步骤
- 先在不修改原有系统功能的基础上修改既有代码的设计。
- 在已经重构过的、可以适应新需求的基础上增加新功能。
系统重构的六大步骤
第一步:分解大函数
- 发现和提取重复逻辑的代码,看是否能够归结到一个函数
- 以功能为核心将其拆分为一个一个独立的函数
第二步:拆分大对象
衡量对象好坏的标准是:高内聚,低耦合。我们以职责驱动设计思想为核心,要求设计的所有类和接口都有自己的职责定义,每个类和接口内部的方法和属性都是围绕该职责设计的,尽量不取做与职责无关的事情。
- 以单一职责原则(SRP)对对象进行拆分
- 抽取类 :站在用户的角度、分析业务领域相关的事务、事物的属性、事物拥有的行为。
- 归并类 :从更高层次上,再次对现有的类进一步抽象
第三步:提高代码复用率
许多功能之间都有相同或相似的代码,如何编写这部分代码?什么是相似功能呢?1、处理同一流程中某个环节而采用的不同方式。2、在不同业务中某个功能相似或相近的环节
- 当重复代码存在同一个对象时:抽取方法
- 当重复代码存在于不同对象中时:抽取类
- 当不同对象中复用代码时:封装成实体类
- 当代码所在类具有某种并列关系时:抽取父类
- 当出现继承泛滥时–将继承转换为组合
- 当重复代码被分割成碎片时:继承结合模板模式
第四步: 发现程序可扩展点
进行系统重构另一目的就是: 使系统能够更加轻松地应对系统需求的变更,提高系统的易变性。
- 以开放-封闭原则对可扩展点进行设计
- 过程的扩展与设计钩子 : 模板模式增加可扩展点
- 面向切片编程(Python 中装饰器就是一很好的例子)[拦截器」
第五步:降低程序依赖度
面对日后软件的变化需求,最根本方法就是降低系统的耦合度,即系统中各个功能之间的互相依赖程度。这也是绝大多少设计模式的目标
- 依赖反转原则 (DIP:Dependency Inversion Principle)
1、高层次的模块不应该依赖于底层的模块,两者都应该依赖于抽象接口 2、抽象接口不应该依赖于具体是吸纳,而具体实现应该依赖于抽象接口。
- 外部接口与适配器模式–与外部系统解耦
- 继承的泛滥与桥接模式(原有的因两个变化形成的继承改写为组合)
- 方法的解耦与策略模式
- 过程解耦与命令模式
- 透明的功能扩展与设计—组合模式与装饰者模式
第六步:分层
略
笔记未覆盖的地方
- 怎么拥抱变化—领域驱动设计
- 评价软件质量的指标