有时,我的老板会向我们抱怨:
为什么我们需要这么长时间才能实现功能?
实际上,该功能之前已在其他应用程序中实现,您只需要从那里复制和粘贴代码。成本应该低。
这确实是一个难题,因为在我看来,复制和粘贴代码并不是一件简单的事情。
您有充分的理由向您的非技术老板解释吗?
有时,我的老板会向我们抱怨:
为什么我们需要这么长时间才能实现功能?
实际上,该功能之前已在其他应用程序中实现,您只需要从那里复制和粘贴代码。成本应该低。
这确实是一个难题,因为在我看来,复制和粘贴代码并不是一件简单的事情。
您有充分的理由向您的非技术老板解释吗?
Answers:
如果您在复制粘贴代码中发现错误,则需要在每个位置修复该错误,并希望您能记住所有错误(对于更改的要求也是如此)。
如果将逻辑放在一个地方,则在需要时更容易进行更改(因此,如果您决定应用程序需要更新,则只需在一个地方进行)。
让老板了解DRY原则(不要重复自己)。
您所描述的内容听起来像是库的完美用法,您可以在其中共享代码并将其保存在一个地方。
如果我打算在以后尽快重构代码,我将永远只复制粘贴代码-确保以后再提取通用代码,以便可以重用尽可能多的逻辑。不久之后,我的意思是几分钟和几小时后,而不是几天和几周。
ifs
,而且大多数工具不支持在这一点上克隆检测。
显而易见的原因是,您将来要承担“债务”:您需要对代码进行的任何更改(不仅是错误修正,还包括任何更改)现在的成本都将增加一倍,因为您必须更新两个位置-风险更大,因为您最终会忘记其中之一。换句话说,现在使它工作更快将使您的工作将来变得更慢,这从商业角度来说可能是好的,但通常不是这样。
但是,更重要的原因是,“与此相同”的假设多半不是错误的。只要您的代码依赖正确的潜行假设,将其复制到另一个位置都会导致错误,除非这些假设也存在于新位置。因此,粘贴的代码通常从一开始就出错,而不仅仅是在下一次更改之后。
从设计角度讲,复制粘贴的代码无疑是一场灾难,将来有可能引起很多问题。但是你问为什么你花了很多工作,现在,答案是:因为它从来就不仅仅是复制和粘贴。
如果原始代码是作为一个相当独立的库编写的,目的是要重用,同时要兼顾灵活性和客户端使用-那么不错,但这不是复制粘贴,而是使用代码库。实际的代码复制粘贴通常如下所示:
总之,现有的无法直接使用的代码充其量可以作为编写类似代码的良好参考。当然,它不能完全解除,不能在完全不同的系统中工作。通常,可以安全地假定,编写和完成的所有代码都应尽可能少地弄乱-即使是副本而不是原始的代码本身。
如果要基于复制粘贴来构建项目,则必须以一种易于重用的方式开始编写代码,而无需复制原始代码并弄乱它。这是值得做的,如果那是您老板所期望的,那么你们俩都需要确保这就是您首先设计和工作的方式。
复制和粘贴是一场灾难,等待发生。您的老板应尽早评估装运价格,以考虑将破损代码尽快运送给最终用户的价格。
在我公司中,我们始终使用类和方法,并为其提供技术文档。我认为这是最佳实践,如果您可以使用具有良好键的svn搜索应用程序查找之前使用的方法类:)