重构那点事

重构,早就不再是“奢侈品”,而是“日用品”。纵然如此,在自己的工作过程中,还是听到很多关于重构的误解。

首先,重构是日常工作。

许多人问过我这样的问题,要不要拿出专门的时间做重构。作为一个程序员,重构就应该和写代码、写测试一样,是我们日常工作的一部分,只要你写代码,就应该重构。特别是当你在做TDD的时候,如果你只写测试,编代码通过,对不起,那根本不叫TDD,那叫测试先行。目前为止,我还没有见过一个程序员,包括我自己在内,写代码是一遍就写得非常整洁,无需重构的。通常都是第一遍写出的代码只能实现功能,然后,把它重构得符合整洁的要求。这里要说的重点是,别讨论专门拿时间做重构,那就是你日常工作的一部分。

我知道为什么会有人问出这样的问题,这就是接下来要说的:重构不是重写。

对于很多人来说,他嘴上说的是重构,心里想的是重写,所以,这事很大,不是一蹴而就的,所以,要专门划拨时间来做。重写,事确实不小。但也是有技巧可言的。我们这里所说的重写,不是整个系统的重写,那专门立项就好了,这里所说的是要调整项目的某个模块,或是某个设计。

一旦设计到调整,实际上是对整个项目组编码风格的一种影响,因为影响比较大,所以,可以考虑以技术债的形式在项目组内部提出来。如果项目组内达成共识,并且业务人员也同意给这件事留出时间,那就可以着手来做了。想要说服业务人员,最好是告诉他们,花多长时间做这件事,能给未来省下多少时间。即便所有人都同意这个调整的方案,真正在实施的时候,我们也需要按照重构的思路来做,这也是需要一些功夫的。

没有测试的重构就是耍流氓。

对于我们公司内部的项目,测试多还是有保障的,但我周游天下时亲眼见过一些没有测试的巨大代码库,我能说的,赶紧花时间为你要写的代码补一些测试,然后再说重构的事。

具体到动手重构了,标准只有一个:重构可以随时随地停下来,不破坏任何测试。

这话说得很容易,但真要做到可绝非轻而易举。我看到很多大动干戈的修改,中间无法停下,一旦发觉不对,只好推翻重来。我只能说,对于重构,这种做法只是理解了形,并不理解神。站着说话不要疼,事实上,我个人对重构的理解也是看到了有人用小步重构把一段代码逐步改好之后,震惊之余,才理解原来重构应该这样做。要知道,我也曾经是大刀阔斧之辈,那一刻,我皈依于小步重构。

小步重构,是需要刻意练习的。我是花了不少时间去练习,才能做出一些当初见到的重构效果。时至今日,我依然不敢说自己有十足的把握能够小步重构每一段丑陋的代码,内心中总有一种躁动,想一路劈杀过去,只能不断与自己说,慢点,别急。

在我们公司内部总是有这样机会见到小步重构。

重构易,程序员人人知重构,重构难,做好重构者寥寥无几。无它,刻意练习。

火爆 售票中
Scrum.Org 主办
搜索
近期公开班
safe scrum master
8月10-11日
SAFe ScrumMaster 官方认证公开班
Eric Liao 廖靖斌 授课
Scrum.org专业Scrum产品负责人(PSPO)认证徽章
8月31-9月01日
专业Scrum产品负责人(PSPO)认证公开课
Derek Ding 丁志润 授课
领导大规模敏捷Leading SAFe认证徽章
10月19-20日
Leading SAFe领导大规模敏捷认证课
Eric Liao 廖靖斌 授课
Scrum联盟acsm认证徽章
10月19-20日
高级Scrum Master(A-CSM)认证公开课
Jim Wang 王军 授课
scrum alliance csm认证徽章
10月26-27日
Scrum Master (CSM) 认证课
中文远程
Scott Dunn & Eric Liao 授课
大规模敏捷顾问SAFe SPC认证课徽章
11月2-5日
SAFe认证-SPC SAFe认证培训师导师班
上海-面授
Marsha Xue , Alex Guan 授课
scrum alliance csm认证徽章
11月09-10日
Scrum Master (CSM) 认证课
Lance Zhang 授课
专业Scrum Master (PSM I) 认证徽章
11月16-17日
专业Scrum Master (PSM I) 认证公开课
Derek Ding & Lorenz 授课
深圳面授
专业Scrum Master (PSM I) 认证徽章
11月16-17日
专业Scrum Master (PSM I) 认证公开课
Derek Ding & Lorenz 授课
远程
scrum alliance csm认证徽章
12月14-15日
Scrum Master (CSM) 认证课
Lance Zhang 授课
0
0
小时
0
分钟
0
由Scrum.org主办的 2024中国Scrum大会 8月17日将在上海开幕
0
0
小时
0
分钟
0
预约回电
留下您的手机号,我们会在第一时间联系您。
热线电话:400-696-6280
预约回电
预约成功,我们会尽快联系您。