【问题标题】:What are the disadvantages code reuse?代码重用的缺点是什么?
【发布时间】:2009-06-30 08:19:41
【问题描述】:

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

【问题讨论】:

  • @leppie:感谢您纠正我在标题中的错误拼写!
  • 我找到了related question

标签: language-agnostic code-reuse


【解决方案1】:

我可以推荐几个

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

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

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

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

  5. 重用文档记录不佳的库可能会花费比预期/估计更多的时间

【讨论】:

  • 这可以概括为:“只有当它确实满足你的需要(并且有效)时才重用代码”:-)
  • 错误也得到控制,而不仅仅是复制
【解决方案2】:

附:编写我们自己的库的原因是:

  • 评估外部库通常非常困难并且需要大量时间。此外,有些问题只有在经过全面评估后才会显现出来。
  • 这使得我们可以引入一些特定于我们项目的功能。
  • 更容易进行维护和编写扩展,因为您对库了如指掌。

【讨论】:

  • 您可能应该刚刚更新您的问题,而不是添加答案作为附录。
  • 我没有这样做,因为那时我会问两个问题:复制现有库有时是否合理,我们的理由是否可以接受。
  • 事实上,回答自己的问题是可以的,甚至受到鼓励。如果是答案,无论是谁写的,都应该写成答案:-)。
  • 我认为这些理由是有道理的。
  • 是的,消除了使用别人代码的不确定性
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    第一个问题是:只有当代码是好的代码时,您才能成功地重用代码。如果它设计不佳、有错误或非常脆弱,那么您将遇到与您已经遇到过的相同的问题——无论如何您都必须自己去做,因为修改现有代码非常困难。

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

    【讨论】:

      【解决方案5】:

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

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

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

      总会有取舍。

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              【解决方案9】:

              代码复用的缺点:

              • 调试需要更长的时间,因为它不是您的代码,而且很可能是有些臃肿的代码。
              • 任何特定要求也需要更多的工作,因为您受到重复使用的代码的限制并且必须解决它的限制。
              • 从长远来看,不断的代码重用将导致应用程序臃肿且杂乱无章,难以追踪错误 - 编程地狱。
              • 重用代码可以(取决于具体情况)减少程序员的挑战和满意度因素,同时也浪费了开发新技能的机会。

              这取决于您要重用或重写的情况、语言和代码。一般来说,我相信语言越高级,我就越倾向于代码重用。高级语言中的错误可能会产生更大的影响,并且更容易重写。高级代码必须保持可读、整洁和灵活。当然,所有代码都可以这样说,但不知何故,重写 C 库听起来不如重写(或者说重构)PHP 模型代码好。

              无论如何,这些都是我用来宣传“重新发明轮子”的一些论据。

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

              【讨论】:

                【解决方案10】:

                想知道您使用什么来保留您重新发明的这个库吗?

                【讨论】:

                • 你有一堆很棒的代码......你是如何存储它的,以便于查找,帮助其他开发人员找到正确的代码来使用?像 wiki 或项目管理网站?似乎是存储代码以供重用的最常用方式。
                【解决方案11】:
                1. 创建可重用代码的初始时间更昂贵且耗时
                2. 当主分支有更新时,您需要同步并再次部署
                3. 错误会被复制 - 如果您重复使用错误代码
                4. 重用记录不佳的代码可能会比预期/估计花费更多时间

                【讨论】:

                  猜你喜欢
                  • 2016-11-20
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2010-12-23
                  • 2015-08-29
                  • 2011-01-11
                  • 1970-01-01
                  相关资源
                  最近更新 更多