我确信你们都已经在那里,你们开展了一个项目,那里有一个蹩脚的旧代码库,几乎不符合目的,你必须决定从头开始重新编写或修复已经存在的内容.
传统智慧倾向于暗示你不应该尝试从头开始重写,因为失败的风险非常高.那么你在面对这个问题时做了什么,你是如何做出决定的呢?结果如何呢?
每次使用它时都要稍微清理一下代码.如果还没有,请设置单元测试框架.所有新代码都应该编写测试.您因错误而修复的任何旧代码,也尝试在测试中滑动.
随着清理工作的进展,您将能够将越来越多的讨厌代码扫描到封装的容器中.然后你可以在将来逐一挑选这些.
像javadoc或doxygen这样的工具(如果尚未使用)也可以帮助改进代码文档和可理解性.
反对完全重写的论据非常强烈.在原始项目的时间范围内编码的那些"小错误"和行为将再次潜入其中.
这真的取决于它有多糟糕.
如果它是一个小系统,并且你完全理解它,那么重写并不疯狂.
另一方面,如果它是一个巨大的遗留怪物,拥有一千万行无证的神秘代码,那么你真的很难完全重写.
需要考虑的要点:
如果它对用户来说看起来不错,他们就不会在乎它是什么样的意大利面.另一方面,如果它对他们也不好,那么获得协议(和耐心)会更容易.
如果你重写,尝试一次一个部分.一个混乱,混乱的代码库可能会使这很困难(即,只更换一个部分需要重写大型依赖代码的冰山),但如果可能的话,这使得逐步重写并从用户那里获得反馈变得容易得多.
我会毫不犹豫地为大型系统承担一个巨大的重写项目,而无法一次发布一个新版本.
请参阅Joel Spolsky的文章,你永远不应该做的事情.总而言之,当您重写时,您将失去所学到的所有课程,以使您当前的代码按照它需要的方式工作.
另见:泥球大球