复制/粘贴式编程确实存在问题否

我觉得复制/粘贴式编程——复制项目中存在的代码,并重新利用——违反了编程最佳实践,如Don’t Repeat Yourself(不要重复你自己,简称DRY)。这是技术债务的最佳例子,会让维护代码的长期成本增加。

但它也是完成某项工作很自然的一种方式——找一些已经在运行且和你想实现的非常接近的代码,复制并利用它。几乎所有人都在某些时候这样做过。因为有时候,复制/粘贴式编程不仅方便,而且还是一种正确的做法。首先,让我们搞清楚复制、粘贴是什么意思。它并不是从互联网上复制代码,我所指的复制和粘贴是,程序员为了走捷径而重用代码——他们需要解决一个问题,而这个问题与系统中的另一个问题很相似,他们将复制已有的代码,并做相应修改。

在设计与开发的早期阶段,复制粘贴并没有实际的优点。编码和设计仍具有可塑性,你有机会通过正确的抽象思维、程序、库来完成系统所需要的功能。这时并没有太多可供复制的代码。而到了开发晚期,你已编写了大量代码,尤其是在你维护大型的、长时间运行的系统时,关于复制和粘贴的争论会变得更加复杂。

为什么要复制、粘贴?

程序员之所以复制、粘贴,是因为它可以节约时间。首先,你拥有你认为可以采用的代码,所要做的只是改变或增加功能。你可以专注于你试图解决的问题,专注于不同点。你仅需要理解你实际打算用什么。你有更多的自由去迭代,解决你面临的问题——在需要的时候你可以清理代码,删除那些你不需要的代码。所有这些都是很重要的,因为你可能不知道你需要保留什么、改变什么,直到你深入解决一个问题时。

复制/粘贴式编程也可以降低风险。如果你必须回过头来改变、扩展现有代码,以让它保留现有功能的同时增加解决新问题的能力,那你可能要承担着影响其他功能正常工作的风险。这时复制代码,并从那里开始工作,通常会更安全、更节约成本(至少从短期来看)。

如果你正开发一个新的B2B用户界面,什么内容可以被新的用户利用呢?通常会采用一个现有的界面,然后再看看还需要改变什么。最后,将有一些通用的代码可以被两个界面利用(毕竟这就是你复制代码的原因),但在你知道这些通用代码是什么之前,可能需要花费一些时间。寻找通用的设计、正确的抽象和变化,以支持不同的实现和异常处理,可能很困难且耗时。你可能会因为代码难以理解、难以维护、将来难以修改而放弃——因为最初的设计没有预料到不同情况下的异常和扩展,重购只可能会浪费你时间。这时你可能需要一个全新的设计和实现。为了实现多用途、可共享、可扩展而改变现有代码,重构(或重写)其中的部分代码将增加你的工作成本与风险。仅仅为了吸引一些新的线上客户而导致产生一些影响到现有用户和合作者的问题,其后果你是承担不起的。你需要额外小心,你不仅要理解你所做之事(新界面)的详细情况,还要了解现有界面的所有细节,它的行为、假设,这样你才能应对自如。

如果你认为通过自动化测试便可捕获所有的这些行为,你就太天真了——假设你有一整套好的自动化测试工具。你需要在现有界面上重做集成测试。请那些已经为测试软件花费了几个星期、几个月的客户和合作者再测试它,将是很困难、很昂贵的。他们看不到花费这些时间与开支的必要,因为他们所拥有的已经可以很好地工作了。如果有必要做出一个通用的解决方案,那现在就开始复制、粘贴,并为后面的重构,甚至重新设计制定一个计划,这样才是正确的方法。

什么时候复制、粘贴才有意义..
http://hkaimin.blog.163.com/blog/static/19969705220126585523632/

猜你喜欢

转载自hkaimin201207021239.iteye.com/blog/1577141