代码重用有哪些缺点?

时间:2009-06-30 08:19:42

标签: language-agnostic code-reuse

几年前,我们需要一个C ++ IPC库来通过TCP进行函数调用。我们选择了一个并在我们的应用中使用它。过了一会儿,很明显它没有提供我们需要的所有功能。在我们软件的下一个版本中,我们将第三方IPC库扔掉,并将其替换为我们自己编写的一个。从那时起,我有时会怀疑这是否是一个好的决定,因为它已被证明是相当多的工作,它显然感觉像reinventing the wheel。所以我的问题是:代码重用是否有缺点证明这种重新发明的合理性?

11 个答案:

答案 0 :(得分:8)

我可以建议一些

  1. 错误被复制 - 如果您重复使用错误的代码:)

  2. 有时可能会增加额外开销。例如,如果您只需要做一件简单的事情,则不建议使用实现所需功能的复杂BIG库。

  3. 您可能会遇到一些许可问题。

  4. 您可能需要花一些时间来学习\配置外部库。如果重新开发的时间要短得多,这可能无效。

  5. 重复使用记录不良的图书馆可能会获得比预期/估计更多的时间

答案 1 :(得分:2)

P.S。编写我们自己的库的原因是:

  • 评估外部库通常非常困难,需要花费大量时间。此外,经过全面评估后,一些问题才会显现出来。
  • 它可以引入一些特定于我们项目的功能。
  • 您可以更轻松地进行维护和编写扩展程序,因为您可以直接了解库。

答案 2 :(得分:2)

这几乎总是个案。您必须考虑您尝试重用的内容的适用性和质量。

答案 3 :(得分:2)

第一个问题是:如果代码是GOOD代码,则只能成功重用代码。如果它的设计很差,有漏洞,或者非常脆弱,那么你会遇到你已经遇到的相同问题 - 你必须自己去做,因为它很难修改现有的代码。

但是,如果您正在考虑使用的是第三方,那么您没有源代码,那就有点不同了。如果它是那种库,你可以尝试获取源代码。一些商业图书馆供应商可以接受建议和功能请求。

答案 4 :(得分:1)

通过重用第三方库,最大的缺点(你自己提到)是你强烈耦合并依赖于该库如何工作以及它应该如何使用,除非你设法创建一个可以使用的中间接口层照顾它。

但是创建通用接口很困难,因为将现有库替换为现有库,或多或少要求新功能以类似的方式工作。但是,您始终可以使用它重写代码,但这可能非常困难,需要很长时间。

另一个方面是,如果您重新发明轮子,您可以完全控制正在发生的事情,您可以根据需要进行修改。如果您依赖于第三部分库并且不断为您提供更新和错误修复,那么这完全是不可能的。另一方面,以这种方式重用代码使您可以专注于软件中的其他事情,这有时可能是您要做的事情。

总是有一种权衡。

答案 5 :(得分:1)

金色智慧::它必须在可重复使用之前可用。

答案 6 :(得分:1)

如果您的代码依赖于外部资源并且那些代码消失了,那么您可能会削弱许多应用程序的部分内容。

答案 7 :(得分:1)

由于大多数重复使用的代码都来自互联网,因此您会遇到Bathroom Wall of Code Atwood谈论的所有问题。您可能会遇到不安全或不可靠的借用代码问题,而且黑盒子越多,就越糟糕。

答案 8 :(得分:1)

代码重用的缺点:

  • 调试需要花费更长的时间,因为它不是您的代码,并且它可能是一些有点臃肿的代码。
  • 任何具体要求也会花费更多的工作,因为您受到重复使用的代码的约束,并且必须解决它的限制。
  • 持续的代码重用将导致臃肿和混乱的应用程序长期运行,难以追逐错误 - 编程地狱。
  • 重复使用代码可以(取决于案例)减少程序员的挑战和满意度因素,也浪费机会开发新技能。

这取决于您要重用或重写的大小写,语言和代码。总的来说,我认为语言越高级,我越倾向于代码重用。高级语言中的错误可以产生更大的影响,并且它们更容易重写。高级代码必须保持可读性,整洁和灵活。当然,这可以说是所有代码,但是,不知何故,重写C库听起来不如重写(或者说重新分解)PHP模型代码那么好。

所以,无论如何,这些是我用来推广"重新发明轮子的一些论据"。

从长远来看,从头开始重写比从而解决当前代码库中的错误和限制更快,更有趣,更好。

答案 9 :(得分:0)

想知道您正在使用什么来保持这个库重新发明?

答案 10 :(得分:0)

  1. 创建可重用代码的初始时间更加昂贵且耗时
  2. 当master分支有更新时,您需要对其进行同步并再次部署
  3. 错误被复制-如果您重复使用错误代码
  4. 重复使用记录不良的代码可能会花费比预期/估计更多的时间