重构的成本真是巨大

2013-09-11 19:12:39 +08:00
 sivacohan
最近在重构项目里面的一个小功能。

最初的预期是两周时间,到目前为止,已经做了一个月了。虽然说期间也有其他更高优先级的事情打扰,没有全力的投入到重构大业,但是重构的进度和影响的范围也让我震惊了。(几个月前,做这个功能只用了两天的时间……)

目前在重构过程中发现的问题:

1、原来的代码的层级不清晰,会造成一些接口的滥用。而这些滥用的部分。在重构的过程中,必然会被清理出去。然后,就会惊奇的发现,原来现有接口按照规范是无法满足这个业务需求的,需要重新设计或者修改部分接口。

2、项目中的僵尸代码。早就没有人调用这些接口了。但是不知什么原因,这些代码被留了下来。这些代码的清理也是一个不小的工作。

3、不符合规范的接口。这个没得说,只要项目的生命周期变长,肯定会或多或少的存在不符合当前规范的接口。修改这些接口,以及相关app接口调用也是一个不小的时间。

4、重构时引入的新问题。想要尽量保持界面的原有样式,尽可能减少对用户的冲击。这就给重构的时候带来了很大的限制。为了保持样式不变,不得不多写很多无聊的逻辑和限制。

重构时关注的问题:

1、规范性。重构后的代码必须符合当前的规范。

2、文档的充分性。为自己积德吧……

3、考虑未来项目的发展。我这里主要是在js的层面开放了和数据相关的接口,提供了一个简单的模版。小的变化基本修改html和js就能完成了。

4、考虑未来因为项目压力引入的黑魔法。有些时候项目要求xx时间之前上线,这时硬编码就算黑魔法里面最简单的部分了。我在代码里面提高了指定的位置用来写脏代码。就一个地方脏,总比到处都脏,跟捉迷藏一样要容易处理。提供的方式是给数据加了一个filter,目前filter是空的,未来就往这里写脏代码。

综上,我真的为我自己提出这次重构而深深的自责……

PS:希望各位也说说关于重构的经验,诸如如何预估重构所需要花费的时间,限制自己在重构的时候看到不爽的地方就想改的冲动等。
5160 次点击
所在节点    程序员
26 条回复
ejin
2013-09-11 19:57:04 +08:00
楼主遇到了上帝,上帝愿意让楼主许愿次,于是发生以下对话
楼主拿着地球仪说到:上帝,我希望世界和平!
上帝: 这个太难了,换一个!
楼主:我想成功的重构这个项目的!并希望以后再也不用对它重构了。
上帝沉默了一会说到: 我们还是来谈谈世界和平的事情吧!
missdeer
2013-09-11 21:00:08 +08:00
我前不久也是自以为对一个小功能进行重构,本以为三天到一周就可以搞定,结果断断续续搞了约1个月
Xrong
2013-09-11 21:09:49 +08:00
不能同意更多,最近被重构搞的头晕脑大,旧代码各种逻辑混在一起,数据库存在冗余无用字段,接口不完善,清除各种无用代码,需求不清晰,越迁越无力...
同求重购大神给点意见...
felix021
2013-09-11 21:42:16 +08:00
感觉重构就是个大坑,遇到这些事情是必然的,能做的事情就是仔细考虑这次应该如何实现,避免下次重构,或者至少下次别人接手重构的时候不会想砍你……
williamx
2013-09-12 09:00:15 +08:00
我觉得如果重构的时间在3个小时以外,那可能已经不是重构的范畴了。
angelface
2013-09-12 09:08:39 +08:00
@williamx 这才是正解,你那是重定, 不是重构。
angelface
2013-09-12 09:09:12 +08:00
手滑,更正:你那是重写, 不是重构
geew
2013-09-12 09:12:48 +08:00
确实 重构到一半感觉不会再爱了
66450146
2013-09-12 09:49:19 +08:00
为了避免未来重构上的蛋疼,我在这个项目里面写每个类每个方法都很小心,尽量不要去破坏程序的结构。。。

现在这个项目花费的时间已经接近计划的三倍了
jianghu52
2013-09-12 09:55:37 +08:00
说一个个人的重构的经历。一个网站,要修改后台的验证机能,一看,耦合太紧密,所以决定重构。后果就是:从测试式样开始写,包括详细式样,整整写了20m的文档。代码比以前大了2倍,但是整洁了很多。最最关键的是,客户不给钱!!!
min
2013-09-12 10:13:55 +08:00
重写的成本是很大的lz
jun0205
2013-09-12 21:48:01 +08:00
不要做无谓重构。重写就更不要了,一个产品不应该是看代码写的好不好。
hitsmaxft
2013-09-12 23:59:20 +08:00
重构, 是看你对实际整体逻辑的把握情况, 所以.. 预想时间 * all/你实际了解的半分比 * 传说中预估时间放大因子(约为2) = 最终时间
hitsmaxft
2013-09-13 00:00:13 +08:00
半分比 -> 百分比
so898
2013-09-13 00:20:51 +08:00
好在我现在写的项目都是充分或者强制OO的
我现在想要重构一个部分,都是先找张纸记好功能和需要优化的部分,然后来点小酒,删掉Class,重头开始……
再不行的就直接删掉整个项目重来了……
cmonday
2013-09-13 00:35:11 +08:00
重构是为了未来
likuku
2013-09-13 01:52:17 +08:00
@cmonday make buildworld ...哈哈,这是 freebsd 下用系统源码重编译基本系统。
hekunhotmail
2013-09-13 08:58:43 +08:00
重构不如重写,这是我的经验,当然只是针对小项目 对于大项目重构的成本大 周期长 是必然的
firsthym
2013-09-13 10:21:39 +08:00
我重构过1个C++写的web CGI,重构主要集中在MVC中的V和C,M因为是核心部分所以基本没有变动。
eary
2013-09-13 10:53:33 +08:00
直接重写

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX