Language agnostic 代码可重用性:值得吗?

Language agnostic 代码可重用性:值得吗?,language-agnostic,code-reuse,Language Agnostic,Code Reuse,我们都编写可重用的类和代码 我们考虑了可配置性,使我们能够一次又一次地重用这个奇妙的新类 我们告诉老板,现在多花点时间可以节省我们以后的时间和金钱 但实际上,对于我们这些不编写第三方库并将时间花在整个应用程序上的人来说,您花费额外时间编写以重用的一个类实际上在另一个项目中被重用了多少次 您的库中有多少定制类可用于多个项目?我的常见经验法则是: 如果你重复一次,复制它 如果你重复两次,重构它 好问题 我认为“为重复使用而设计”是错误的。我发现我编写的代码是可重用的,干净漂亮。真正的重用设计只发生在

我们都编写可重用的类和代码

我们考虑了可配置性,使我们能够一次又一次地重用这个奇妙的新类

我们告诉老板,现在多花点时间可以节省我们以后的时间和金钱

但实际上,对于我们这些不编写第三方库并将时间花在整个应用程序上的人来说,您花费额外时间编写以重用的一个类实际上在另一个项目中被重用了多少次


您的库中有多少定制类可用于多个项目?

我的常见经验法则是:

  • 如果你重复一次,复制它
  • 如果你重复两次,重构它
  • 好问题
    我认为“为重复使用而设计”是错误的。我发现我编写的代码是可重用的,干净漂亮。真正的重用设计只发生在代码第一次真正被重用的时候!

    事先花时间尝试使某些东西可重复使用往往是浪费时间,因为你永远不知道什么东西需要重复使用


    话虽如此,在我的工作中,我们有一个库集合(大的,500MB或更多),几乎每个项目都可以重复使用-大部分是特定领域的东西。

    如果你确定不再需要它,不用麻烦了。即使你认为它会派上用场也不行。当你真的再次需要它时重构它

    然而,不使其可重用并不是不使其透明的借口。每当我以尽可能透明的方式编写代码时,它的可重用性总是达到99%。

    leppie写道:


    我的经验法则是:

  • 如果你重复一次,复制它
  • 如果你重复两次,重构它
  • 我要补充的是,确保在代码的两部分都添加了注释,以指示重复,以防出现错误。您不想在一个部分而不是另一个部分中修复它(BTDTGTT)


    Rob

    我同意你的观点,因为在当前应用程序之外,以一种使类易于使用的方式进行编码是没有意义的。大多数情况下,如果我们不这样做,在商业环境中就没有必要这样做。如果另一个应用程序以后需要此功能,则可以将代码提取和通用化作为第二个项目的一部分,管理层可能会同意这一观点


    但是,让代码在当前应用程序的约束范围内可重用是一种很好的做法。重构代码,以避免在当前工作范围内重复。这样可以使以后的工作更轻松。与其说代码是为了重用,不如说是为了更改,更改更为常见。

    我的2c是,代码重用的道德规范需要是公司的事情,而不仅仅是项目的事情。这意味着,当您开始一个新项目时,主要关注的是“我可以从哪些其他项目中窃取代码,以便尽快完成这项工作?”

    这将与“对于工作来说,什么是最好的或最流行的语言/工具”的问题相冲突

    采用这种方法的公司最终拥有一批工程师,他们可以轻松地从一个项目切换到另一个项目,因为语言、框架和内部代码库都是一致的


    不利的一面是,切换到一种“新”语言或框架在政治上要困难得多,即使它需要在某个时候发生。

    SOA一直失败或尚未解除的原因之一是很难重用服务:要么它太具体,不能在其他地方使用,要么太通用(通常非常复杂),不能满足不同客户的需求


    这不是“代码重用”,而是“服务重用”,但有一些共同的概念。

    我不是XP方法(或任何方法)方面的专家,但我认为这个原则可以在这里应用


    只有当你有
    需要重用代码时,才修改代码以供重用。

    可配置性和可重用性之间有区别-前者在许多不同的情况下非常有用,当环境发生变化或其他任何情况时-以我理解的方式使事情可配置,主要是分离的情况代码和数据——这真的是很好的实践

    只有当您正在创建一些您计划用作多个项目库的东西时,可重用性设计才是真正有用的。随着时间的推移,我越来越了解YAGNI原则,这些天我的目标只是为手头的任务编写干净、健壮的代码。我的经验是被重用您不太可能准确地预测它将如何被重用,因此最好只添加您现在需要的代码。这样,如果您将来需要重用它,您就可以添加新的东西,完全满足您的需要,而不必破坏您过去尝试预期的任何现有功能你现在可能需要它


    你可能会发现,在这样做了几次之后,你就拥有了一个稳定而健壮的库,不需要你去改变它,因为它实际上做了你需要的所有事情——对我来说,让它以进化的方式发生比浪费太多时间猜测未来要容易得多。

    一旦你超过了技术实用程序我在现实世界中很少看到实际的重用

    如果你仔细想想,原因是很清楚的。比如说widget_bodger应用程序包含了你所需要的90%的功能,而不是仅仅将缺少的功能添加到应用程序中

    或者说,企业很欣赏widget_bodger中的一个非常酷的“嘟嘟”功能,并希望将其整合到gernerate_executive_expenses应用程序中