《重构:改善既有代码的设计》读书笔记一
一、重构原则
1、重构定义
重构:对软件内部结构的一种调整。目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。
2、为何重构
在开始说为何重构之前,先说一下很多程序员为何不喜欢重构。
- 时间紧,一直忙着实现功能,觉得重构影响效率,而且重构不算绩效,简直吃力不讨好
- 觉得代码写完之后可能以后都不是自己维护了,只顾当时快速实现功能
- 重构有风险,它必须修改运作中的程序,这可能引入一些不易察觉的错误
- 对重构没有系统性、全局性的认识,面对一堆烂代码,没有重构技巧的指导,只能想到哪改到哪
- 接手别人写的代码时,代码已经腐化到无可救药了,重构成本极高
是的,对当时做完功能的程序员来说不重构确实相对痛快,但是有没有想过将来接手这块代码的人的感受?自己遇到烂代码时都经常吐槽之前的开发者,但自己有养成持续重构的习惯吗?难道你也想在将来被别人吐槽?是现在花几分钟重构的成本高,还是将来找一个bug花半天的时间成本高?当以后新来一个需求时,是不重构的改动成本高?还是重构之后的改动成本高?所以希望大家多平常了解一下重构相关知识,做一个有素养的工程师,这样大家都好。下面罗列了几个重构的原因:
- 重构改进软件设计
- 重构使软件更容易理解
- 重构帮助找到bug
- 重构提高编程速度
项目在演进,代码不停地在堆砌。如果没有人为代码的质量负责任,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。
每个软件模块都有三项职责。第一项职责是它运行时所完成的功能。第二项职责是它要应对变化,一个难以改变的模块是有问题的,即便能够工作,也需要对它进行修改。第三项职责是要和读者进行沟通。 ——《敏捷开发·纪念版》
3、何时重构
- 添加功能时重构
- 事不过三,三则重构(三次法则)
- 修补错误时重构
- 复审代码时重构
以上四点被称为重构时机的“增删改查”,目的是想及时通过最小的努力就能对我们的系统进行扩展和修改。注意,重构是持续的,不要总想着“憋大招”,等代码烂到一定程度再重构,有时候项目代码太多了,重构很难做得彻底,最后又搞出来一个“四不像的怪物”,这就更麻烦了!所以,寄希望于在代码烂到一定程度之后,集中重构解决所有问题是不现实的,我们必须探索一条可持续、可演进的方式。
4、重构的难题
- 重构数据库
- 修改接口(特别是已发布的接口)
- 难以通过重构手法完成的设计改动
-
何时不该重构
- 重构的代码太混乱,还不如重写一个来的简单
- 项目已经接近最后期限
5、重构与设计
重构与设计是互补的,重构可以带来更简单的设计,同时又不损失灵活性,这也降低了设计过程的难度,减轻了设计的压力。
6、重构与性能
除了对性能有严格要求的实时系统,其他任何情况下“编写快速软件”的秘密就是:首先写出可调的软件,然后调整它以求获取足够的速度。
除非某段代码是影响系统性能瓶颈的代码,否则不要过度地为了性能优化而牺牲代码质量,这样优化的投入产出比并不高,增加了代码实现的难度、牺牲了代码的可读性,性能上的提升却并不明显。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)