《重构》阅读笔记----重构原则

1. 何谓重构

        定义:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低修改成本。

        重构的目的是使软件更容易被理解和修改。可以在软件内部做很多修改,但是对软件可观察的外部行为只造成很小变化,甚至不造成变化。任何用户或其他程序远,都不知道已经有东西发生了变化。

        两顶帽子:重构和添加新功能。两者不能同时进行。

2.为何重构

        重构改进软件设计。经常性地重构可以帮助代码维持该有的形态。不良的程序往往需要设计更多的代码,这常常是因为代码在不同地方使用完全相同的语句做同样的事。所以改进设计的一个重要方向就是消除重复代码。否则修改代码的时候可能忘记修改另一处代码而无法如预期工作。

        重构使软件更容易理解。对代码做适当修改,可以让第二个人更快理解自己的代码,让代码更易读。我也可以利用重构来协助理解不熟悉的代码。

        重构帮忙找到bug。对代码的理解可以帮助找到bug。进行重构时可以深入理解代码的作为,并恰到好处地把新的理解反馈回去。

        重构提高编程速度。良好的设计是快速开发的根本。否则你会将很多时间话在调试上面,无法添加新功能,需要给程序打上很多补丁,而新特性又需要更多代码才能实现。

3.何时重构

        反对专门拨出时间进行重构。事不过三,三次重构。

        添加功能时重构。

        修改错误时重构。如果收到错误报告,说明代码不够清晰,没能一眼看出bug,所以需要重构。

        复审代码时重构。重构可以帮助复审别人的代码。

4.怎么对经理说

        不要告诉经理。受到进度驱动的经历要我尽可能快地完成任务,至于怎么完成,那就是我的事了,而重构可以让我加快编程。

        大多数重构都为程序引入更多的间接层。重构往往把大型对象拆分成多个小型对象,把大型函数拆分成多个小型函数。间接层太多会难以理解。

        但是间接层允许逻辑共享分开解释意图和实现隔离变化(多地使用同一对象,则间接层只需要修改一个地方即可),封装条件逻辑。

5. 重构的难题

        数据库

        修改接口。许多重构手法会修改接口。如果接口已经发布,则需要同时维护新旧两个接口,最好的办法就是让旧接口调用新接口。另一个方法就是不要过早地发布接口

        难以通过重构手法完成的设计与改动。比如很难将不考虑安全需求时构造起来的系统重构为具备良好安全性系统。这时就先想象重构的情况,重构的难度有多大。如果看上去很简单,则会选最简单的设计,哪怕不能覆盖所有潜在的需求。如果预先看不到简单的方法,就会在设计上花费更多力气。

        何时不该重构代码太混乱,不如重写。一个折中的办法就是将大块头软件重新封装为小型组件,然后逐一对小型组件作出重构或重写的决定项目接近ddl

6.重构与设计

          重构与设计互补。

7.重构与性能

        为了让软件更容易被理解,通常会作出一些使程序变慢的修改,但是会使优化更容易。所以编写快速软件的秘密就是:首先写出可调的软件,再调整它获得足够的速度

        有三种编写快速软件的方法。

        时间预算法。适用于性能要求极高的实时系统。这种方法会给每个组件预先分配一定资源--包括时间和执行轨迹,每个组件决不允许超出自己的预算。

        持续关注法。做任何事都要设法保持系统的高性能。这种方法很常见,具有吸引力,但是不会有太大作用。因为90%的优化工作都是白费的,大多数被优化的代码都很少被执行。

        利用90%的统计数据。编写程序时,不对性能做持续的关注,直至进入性能优化阶段--通常是开发后期。这时再按照某个特定的程序来调整程序性能。
        在性能优化阶段,你需要找出性能热点所在的一小段代码,然后集中关注这些性能热点,并使用持续关注法中的优化手段来优化它们,这样可以使用较少的工作量获得显著的效果。但是还是应该进行小幅度的修改,每走一步就要编译,测试,再次度量。如果性能没有提升,就撤销此次更改。

猜你喜欢

转载自blog.csdn.net/qq_38650944/article/details/124368532