何时删除新弃用的代码?

时间:2010-05-22 18:12:20

标签: refactoring

我花了一个月的时间编写了一个精心设计的支付系统来处理信用卡付款和电子资金转账。我的工作在生产服务器上使用了大约一个月。客户最近告诉我,他不再想使用电子转帐功能。

因为我必须与信用卡网关接口和通信的方式与电子资金转帐api完全不同(例如,cc公司在http请求后立即给出交易响应,而eft公司提供交易响应5业务在http请求之后的几天,我花了很多时间编写自己的API来抽象常见的函数调用,如

功能支付(金额,pay_method,pay_freq)

function updateRecurringSchedule(user_id,new_schedule)

等。

现在客户想要放弃EFT功能,我对这个抽象支付API的所有工作都已过时。

我正在考虑是否应该废弃我的工作。这是我的专业人士与骗子现在废弃它:

PRO 1:消除代码膨胀

PRO 2:新开发人员不需要学习MY API。他们只需要阅读CC公司的API

PRO 3:因为EFT公司没有处理定期付款时间表,退款和验证,所以我编写了自己的应用程序来执行此操作。虽然CC公司的API允许此功能,但我选择使用我的,以便我可以简化我的代码。既然EFT已经不在了,我可以删除所有这些令人困惑的代码,只需依靠CC公司的系统来管理定期计费,付款时间表,退款,验证等......

CON 1:虽然我可以删除EFT代码,但仍需要时间来删除整合不同支付系统的整个框架。

CON 2:关于PRO 3,构建将支付系统与CC公司更紧密地集成在一起的功能需要时间。

CON 3:我觉得不安全地删除所有这些工作。我不认为我会再次使用它。但是,由于一些莫名其妙的原因,我现在“不能立即”删除这项工作。

CON 4:还存在数据库问题。如果我删除了我的业务逻辑代码,然后规范化数据库(最终将使用新的数据库模式),由于数据迁移问题,很难恢复此功能。然而,如果我将现有代码保留在现有数据库中,那么开发人员维护起来会更麻烦,但不要担心丢失任何内容。

所以我的问题是,我应该删除一个月值得近期的发展吗?如果是的话,我应该立即这样做还是等待X时间呢?

其他详细信息 我添加了CON 4

4 个答案:

答案 0 :(得分:8)

正确使用VCS意味着永远不必为删除代码感到内疚。

答案 1 :(得分:4)

删除它。没理由保持它。我确信您使用的是版本控制系统,因此您可以随时将其恢复到您需要的位置。没有人喜欢失去一个月的工作,但它的沉没成本。无论你是否保留,你都没有回来。

答案 2 :(得分:3)

在我阅读您的问题时,您正在使用可能被删除的代码处理定期付款时间表,退款和验证。目前,代码可以正常工作。

  

PRO 3:因为EFT公司没有处理定期付款时间表,退款和验证,所以我编写了自己的应用程序来执行此操作。虽然CC公司的API允许此功能,但我选择使用我的,以便我可以简化我的代码。既然EFT已经不在了,我可以删除所有这些令人困惑的代码,只需依靠CC公司的系统来管理定期计费,付款时间表,退款,验证等......

     

CON 2:关于PRO 3,构建将支付系统与CC公司更紧密地集成在一起的功能需要时间。

我认为您忽略了可能会将错误引入当前运行良好的系统的问题。如果您处理定期付款等的代码正常运行,您确定将所有内容都投入到CC API中是否值得?

听起来这些变化可能存在一些固有风险,应该在投资回报率中加以考虑。另外,谈到投资回报率,你说的是花费付出的时间来撕掉电子转帐代码,对吧?否则,这将是另一个原因。

答案 3 :(得分:2)

您不仅应删除代码,还应删除导致您编写代码的要求。然后删除因需求而做出的所有决定。

例如,您说您需要抽象与两个系统的交互,因为它们是如此不同。不再有两个系统,所以删除抽象。由于需要使用两个系统而做出的任何其他决定。

是的,您可能会再次使用这些代码,这就是版本控制系统是一件好事。但是下次你有这样的要求时,它可能是一个不同的第二个系统,这将导致不同的抽象。

也就是说,如果不通过保留旧代码将其与原始抽象联系起来,它将导致不同的抽象。