重用,重写或重构?

时间:2010-04-14 19:28:06

标签: php maintenance

在工作中,我继承了基于PHP的网站的开发之后,最初制作它的顾问被拯救出来并且没有留下任何痕迹。字面上有一半的代码是从在线教程中删除的,并且有成千上万的内容,如果不完整,那么做的很少。几乎没有任何实际工作。我一直在尝试提取可用的组件,例如布局(巧妙地与代码混合),会话管理(经过精心调配的非转义,未经验证的SQL查询)以及其他一些东西,但是很难强制所有的这个垃圾到位了。此外,我不会说惯用的PHP,更多的是Perl用户,而且我应该在这个项目上主要用于维护,所以重写所有内容似乎只需要将现有的怪物摔跤到位

顺便说一句,我从未见过像这样写得太糟糕的东西。我想,欢迎来到与其他人的代码合作的世界,但我希望在现实世界中拥有这样的宝石并不常见:

  • // WHY IS THIS NOT WORKING
  • // I know this is bad but were going for working stuff right now...
  • // This is a PHP code outputing Javascript code outputting HTML...do not go further
  • // Not userful

我正在寻找我能得到的最佳建议。如果你在我的位置,你会怎么做?

编辑:谢谢大家的快速和有益的建议!

7 个答案:

答案 0 :(得分:19)

向您的经理解释问题,表明除非您删除代码中的技术债务,否则支持成本将继续增加。建议他尽快重写,使用现有系统作为功能的模板,即1-1替换为目标。由于开发时间的很大一部分在于确定您需要做什么,因此这不应该与原始时间一样长。拥有一个称职的开发人员可能意味着它只需要一小部分时间。

让您的经理完成他的工作 - 计算替换项目的投资回报率 - 并做出决定。

答案 1 :(得分:5)

真的,这取决于你所看到的内容的大小和范围。

因为它与你的场景特别相关,如果工作很简单但代码被破坏了,你可能会节省很多时间来重写它。您不会继承任何传统的遗骸或糟糕的设计选择。对于网站,有大量的框架和/或开源解决方案,您可以轻松地映射现有网站。

查看上面的代码示例,看起来将代码片段提交给thedailywtf.com也是值得的。 ;)

答案 2 :(得分:3)

每个人都会不时地继承糟糕的代码。

你在这里得到的是我过去所见过的一个相当经典的例子(我实际看到的情况更糟)。虽然我可以理解重写的愿望(事实上,如果所有的代码都很糟糕,你应该认真考虑这个选项) - 你的经理可能不会那样做,或者至少不会立即。

无论哪种方式,你都会处理这个问题一段时间。我会尽可能地清理,或者 - 如果这是面向客户的 - 推动安全问题。如果代码与我发布的内容一样糟糕,那么可能会出现SQL注入等问题,以及一些CSRF和XSS。因此,如果你将它用于任何需要保护的东西,你就可以为“改善”它做好准备。

答案 3 :(得分:2)

向您的客户解释前任顾问可能已经过头了。代码不可管理,需要重写。如果你想解开这个混乱,那么解释一下,成本将超过从头开始重写。我以前必须这样做。大多数时候更容易重写。

答案 4 :(得分:2)

由于我在成熟的传统环境中工作,我不再为重写/重构而重构。在源历史中看到“改变了什么”比看到漂亮的代码更重要。我们的大多数更改都与错误报告或已批准的“变更请求”相关联,并附有正式要求。但在这里,我说的是基本上有效的代码,而你的代码却没有。因此,在您的情况下,当处理当前不符合要求的代码(任何要求,过去或现在)时,我会说继续并重写。

答案 5 :(得分:1)

维护代码。它很糟糕,但是你在这个职业上的时间越长(并且负责维护)你就会越多地意识到宝石并不是你所见过的最糟糕的东西......

只要学会使用你拥有的东西,并提供尽可能多的好处。当然,如果你真的对代码进行深入评估,并且仍然得出结论,你可以从头开始写它比修复代码更快,那么为你的老板提供(计划好的)时间表并查看它的去向。

答案 6 :(得分:0)

我想你很清楚这里没有简单的答案,处理遗留代码是我们行业中最令人沮丧的事情之一,但我们大多数人都必须经常处理。在你进一步做之前我会建议的是确保你理解项目的确切范围,将其分解为必须的和必须的。然后,您可以首先关注最重要的领域。在重用/重构/重写等的选择方面,这实际上取决于代码首先是多么糟糕以及代码的未来需要什么。