当前位置:网站首页>如何进行「小步重构」?
如何进行「小步重构」?
2022-07-05 04:15:00 【Zachary-Fan】
这里是Z哥的个人公众号
每周五11:45 按时送达
当然了,也会时不时加个餐~
我的第「227」篇原创敬上
大家好,我是Z哥。
关于重构的文章之前也写过两篇:
但是这两篇主要讲的是重构的方式方法。在 Z 哥看来,除了方式和方法还有一个点对于重构这件事来说也很重要,就是如何能够实现“小步重构”。
因为只有“小步”地进行重构,才能达到那种未雨绸缪、防范于未然的效果,将风险扼杀在摇篮里。
所谓“善战者无赫赫之功”,我是非常不提倡以“憋大招”的方式在某个时期重写一个新系统的,不但风险大成本也大。
但是要实现“小步重构”,需要平时注意一些细节,下面我来分享一些我的经验。
首先,归根到底重构就是偿还技术债。所以小步重构之前我们首先要有一种比较好的方式来对待技术债。
不知道你有没有过这样的经历:
在编码实现一个功能时,发现有一个逻辑如果按照全面去考虑的话需要改动很多地方,甚至可能要推翻当前已经写过的部分代码,但是呢现在实际场景并没那么多,当前的实现已经能满足。算了,先这样吧,后续业务怎么发展还不知道呢,到时候再说。
这就是一种很常见的债务,并且这种债务很容易让人忽视,因为它并没有让你在当下做出什么曲线救国的事情,只是一种“短视”的妥协。但是这种妥协一旦多了之后,后续的迭代往往会有很多大大小小的补丁来覆盖之前没有考虑的场景,最终积重难返,因为项目难以继续维护而重写。
上面提到的“大大小小的补丁”其实就是另一种常见的债务,这些补丁往往伴随着 if-else 这种代码出现。大家也都知道,if-else 代码如果过多的话,对人的阅读是非常不友好的。
技术债还有很多,我想每个程序员其实都能识别出来。对待它们的方式不同,最终形成不同人之间工作成果的差异。
Z哥推荐你对待技术债的方式很简单。就是在代码里增加 todo,然后将清理 todo 作为一个固定的任务安排,定期进行。
记 todo 看上去是一个简单的事情,但是还是值得花点心思来提高效率的。常见的场景比如:
有一些改动需要涉及到多个地方,那么可以用某种标识(我习惯用当前时间精确到分钟)来统一标注一下,这样后续修改的时候就不会出现只改了一半导致出现 bug 的情况。
有些重构可能依赖于一些其它的改动才能进行,那么也可以把依赖的改动信息写一下,如果所依赖的地方恰好也在本项目内,还可以备注一下相关的文件名和方法名。
有些重构还可能有一些 deadline 的约束,比如需要在 xx 日期前完成,那么也可以备注一下。
我平时用的 todo 格式是:
//todo:描述需要做什么重构。(202206121536)。依赖于xxx文件中的方法xxx。需要在2022.7.30前完成
做好了备注,剩下的就是定期清理 todo 了,这个需要根据当前的工作饱和度来安排,但 Z 哥建议,哪怕非常忙,至少 1 个月要进行一次。
好了,这篇呢 Z 哥和你分享了我对小步重构这件事的看法和经验。
重构一定是小步快跑式的方式是最好的,不但可以降低风险,从长期来看所耗费的成本也是最低的。具体的做法也很简单就是记 todo 和定时清理。
关于重构的一些方式方法可以查看我之前写的两篇文章。
希望对你有所帮助。
对了,最后还有一个建议强烈推荐给你。就是没有调用的方法尽早删除,不要留着觉得以后可能还会用。根据我这么多年的经验来看,未来再会用到的概率微乎其微,留着反而增加了后续的代码重构成本。因为当你修改一个方法或者字段,然后通过IDE查找引用的时候,这些其实已经没有调用的方法也会被关联到。
推荐阅读:
原创不易,如果你觉得这篇文章还不错,就「点赞」或者「在看」一下吧,鼓励我的创作 :)
也可以分享我的公众号名片给有需要的朋友们。
如果你有关于软件架构、分布式系统、产品、运营的困惑
可以试试点击「阅读原文」
边栏推荐
- EasyCVR更改录像存储路径,不生成录像文件如何解决?
- C语言课设:影院售票管理系统
- After the deployment of web resources, the navigator cannot obtain the solution of mediadevices instance (navigator.mediadevices is undefined)
- Kwai, Tiktok, video number, battle content payment
- Uni app change the default component style
- Alibaba cloud ECS uses cloudfs4oss to mount OSS
- laravel8 导出Excle文件
- Longyuan war "epidemic" 2021 network security competition web easyjaba
- Use threejs to create geometry and add materials, lights, shadows, animations, and axes
- 面试字节,过关斩将直接干到 3 面,结果找了个架构师来吊打我?
猜你喜欢

NetSetMan pro (IP fast switching tool) official Chinese version v5.1.0 | computer IP switching software download

基于TCP的移动端IM即时通讯开发仍然需要心跳保活

【虚幻引擎UE】实现测绘三脚架展开动画制作

【虚幻引擎UE】打包报错出现!FindPin错误的解决办法

As soon as I write the code, President Wang talks with me about the pattern all day

Uni app common functions /api

Learning notes 8

如何实现实时音视频聊天功能

Official announcement! The third cloud native programming challenge is officially launched!

mysql的七种join连接查询
随机推荐
Open graph protocol
TPG x AIDU|AI领军人才招募计划进行中!
Rust区块琏开发——签名加密与私钥公钥
[phantom engine UE] package error appears! Solutions to findpin errors
ActiveReportsJS 3.1 VS ActiveReportsJS 3.0
DFS and BFS concepts of trees and graphs
Threejs realizes rain, snow, overcast, sunny, flame
provide/inject
Official announcement! The third cloud native programming challenge is officially launched!
3. Package the bottom navigation tabbar
Learning MVVM notes (1)
为什么百度、阿里这些大厂宁愿花25K招聘应届生,也不愿涨薪5K留住老员工?
MindFusion. Virtual Keyboard for WPF
【UNIAPP】系统热更新实现思路
The order of LDS links
Fuel consumption calculator
快手、抖音、视频号交战内容付费
FFmepg使用指南
[untitled]
Alibaba cloud ECS uses cloudfs4oss to mount OSS