请问Folwer的重构有没有人有显著的成功经验

08-10-12 bloodrate
现在经常遇到这种问题:接手一个别人做了50%的程序,有可能他代码写的不好也可能是他写的思路与我的思路不同,总之总是需要很多时间来看他的代码考虑怎么加入自己的,还不能保证不出问题,这样导致严重的代码堆积和结构混乱。我在考虑,大家在遇到这种情况的时候会重新把他的代码按自己的思路重构么?我没敢这么做,因为一重构可能导致已经完成的50%无法运行,谁还敢保证不对系统其他地方造成损害?

bloodrate
2008-10-12 19:18
重构的定义是:不改变类外部行为的前提下,对类的内部结构进行调整。这样听起来重构后不会带来损害,因为外部行为没变。

但是,我在拿到别人代码的时候很难完全看出类的外部行为是什么。

banq
2008-10-12 21:22
所以,这也是为什么需要模式和框架的原因。

如果代码是由一个个模式和有明显意图的接口等对象设计实现,那么阅读代码无疑是方便快速的,重构也是容易。

如果原来的代码是面向过程的,没有任何OO设计,那么别人就很难读懂,也就是难以维护和拓展。

那么这时重构,就是首先修改原来代码,重构到模式等对象层面,然后再进行维护和功能拓展。

我一直是这样做的,前段时间我拿到一个800K的手机支付客户端程序,我们知道手机J2ME相对数据库更能用OO,但是因为程序员水平原因和工期原因,程序完全是面向过程的,各种意义的变量名满天飞,不知道哪个变量名会控制哪段状态流程。针对这样系统,首先就是将这些散落在各处的变量进行归类打包封装,从业务上看应该属于哪个对象。最后,几乎每个类都有改动,重写了这些客户端程序。

但重构是没有止境的,只要有你有OO思维,又有点追求完美的心理,那么重构对于你就是很自然的事情,没有重构习惯的人就如同不喜欢收拾自我整理的人一样,说得不好听,就是邋遢的,说好听一点,就不专业。







[该贴被banq于2008-10-12 21:26修改过]

bloodrate
2008-10-13 09:13
重构有些时候是在冒挺大的风险,尤其在工期紧张的时候,如果重写了代码导致其他系统错误是个很让人沮丧的事情。

freebox
2008-10-13 10:31
这就是不写unit test的情况吧?有了这个或类似的重构就变得简单了,红了肯定是有问题的程序,绿了也就不用管里面别人写的那部分了,前提是测试用例要充分,并且自己要充分信任别人是正确的