几年前我被告知有关研究码的再利用。显然,它发现,平均而言,程序员有7分钟的窗口时,在寻找代码重复使用。如果他们没有找到代码,适合他们需要在那个窗口,他们就会写他们自己。

这提出了在上下文需要精心管理你的代码,用于重复使用,以确保可以找到你所需要的内的窗口。

你怎(个人和组织)管理的来源,以使其更易于重复使用?你具体地维持一个复用图书馆?如果是这样,你怎么索引,以最大限度地提高你的打击率?

有帮助吗?

解决方案

一个复杂的问题:

  • 一些部分的代码可以被概括为图书馆或Api。我们有一个共同库,这是保持最新的办法,解决共同的问题。通常为:验证,缓存、数据接入类、记录等等。

  • 一些部件应用程序特有的。他们不可普遍容易。我们把他们在教学文档并得到内部专题介绍。代码也被再循环利用的一个易于浏览SCM(在我们的情况SVN).

  • 我们还有工具产生的代码一一方面不能够再循环,在其他总是相似(认为调用存储程序)。

  • 对编程也是一个有用的方式来传播知识的现有解决方案。我们使用,在可能或适当的。

  • 最后技术的学费。每个编码有一名教师参考。由于教师很少,有很多的共享它们之间和这些知识可以被扩散,在一个自上而下的方式。

其他提示

"重构"毫不留情地和最好的希望。

更新(4年后,希望更加明智)

  • 像S.洛特的评论说:注意到命名。传播给所有提交者'的团队。好名字做的事情可搜索并由此减少了工作重复。
  • 有一个方式做的事情,并保持其可访问和可搜索。
  • 编写代码,用于平均水平(L.C.D)程序..不是聪明的,在那里简单就足够了。(这包括设计图案鞋-霍宁强迫和相关的障碍)
  • 采用一套共同约定的,样式、准则、标准,等。所有早。确保购买,并从而遵守内部的团队。(这意味着每个人都使用标签(或空间)!).不论你选择什么-我们的目标是,该代码应该一致
  • 有一个看门人(尊重的团队的),谁的眼球的所有检查程序对于红色标志。
  • 编写代码,测试的第一个外。这通常可以确保你的代码可以使用由多个客户。(参见全球海洋观测系统的子弹上下文的独立性)
  • 有一个框架,积极支持。

  • 知道现有的码的基薪/让其他开发商知道密码的基础。如果您的组织/公司足够大,有一个人知道密码基础,并可被要求提供指导。

  • 文件中,文件,文件。无证码是没有用的重新使用,因为这需要太长了解其内部运作。

  • 有很好的接口。容易的类型、简单的结构或课程。更复杂的东西是,它将被用于另一个项目。

  • 优化和调试可重复使用的代码。开发人员的经验的错误在其他人的代码,用于第n时将开始代码已经存的代码重新。

如果您不是我最初的回复,请尝试使用 TDD

我认为使用TDD是保持代码耦合度低的好方法,还有其他好处。虽然这本身并不能防止相同的行为被实施两次,但是当您确定可以删除重复的区域时,它会更加容易。

另一个好处是,TDD有一个步骤可以消除重复(重构)作为循环的一部分。

此外,测试构成了代码文档的一部分,因此可以更轻松地识别重复行为。

组织是关键。如果名称空间和智能感知可用,则可以缩小正确的功能,并最终找到它。如果他们没有找到他们想要的东西,他们可能会发现一些接近或相关的东西。只在一个巨大的组中混合使用的代码很容易找到,但人们永远不会找到他们想要的方法。

在命名和位置方面,一致性也很重要。如果您决定在项目期间的某个时刻更改样式,请返回并更改所有内容以适合该样式。它很容易成为一个非常漫长而枯燥的过程,但它比尝试使用不一致的库更好。

对整个应用程序进行概要分析,并从较重的代码部分开始重构。 (80%的时间花费在20%最常用的代码上)

使用能够识别内存泄漏,重复呼叫, 冗长的电话,不同意的记忆,不受干扰的资源等。

按规则,新代码始终使用最佳实践。

  

您(个人和组织)如何管理您的来源   它更容易重用?您是否专门维护重用库?和   如果是这样,你如何对其进行索引以最大化你的命中率?

我没有,我在这里有一个公认的有争议的意见,但我发现最大化代码重用的想法适得其反(我正在解释“最大化”,因为它优先于所有其他事情而不是将其视为同时具有两者考虑平衡的利弊)。我更愿意让团队中的大量冗余工作倾向于更好地分离和隔离每个开发人员的模块。首先,在每个人开始左右不同意我之前,我认为我们可以就某些事情达成一致:

  1. 重复使用错误代码会花费数小时调试其他人的代码是不可取的。
  2. 重用代码来平衡各种各样的不同需求,它几乎不能满足你自己的需求,并要求你跳出很多圈子,最终得到一个尴尬和低效的解决方案是不可取的。
  3. 重复使用经常需要进行设计更改的代码并进行一种需要您每6个月使用它重写一次代码的弃用是不可取的,如果您可以在半小时内自行实施解决方案因为它只是满足您的精确需求,所以未来需要进行设计变更。
  4. 一个充满外星人代码的代码库比那些以惯用和熟悉的方式使用更多语言和标准库的代码是不可取的,即使这需要更多的代码。
  5. 开发人员踩到彼此的脚趾,因为他们都希望对同一个设计进行不兼容的更改,同时争吵和争论以及在彼此的实现中导致错误的更改是不可取的。
  6. 将大量依赖项投射到尚未证明自己的未成熟设计(没有完全的测试覆盖率,没有时间真正隔离设计并确保它有效地满足用户端需求而不需要进一步的设计更改)是不可取的
  7. 使用最复杂的构建脚本包含/导入/链接一大堆库和类/函数来编写简单的东西是不可取的。
  8. 最重要的是,重复使用代码的方式在短期和长期都要花费更多的时间,而不是重复使用代码。
  9. 希望我们至少能就这些问题达成一致。我发现最大化来自过度热心的同事的代码重用的问题是它经常导致上面的一个或多个问题。代码重用的热情并不是根本问题,而是优先考虑的是代码重用,而不是测试覆盖,隔音设计,确保事情在我们像疯了一样重用它们之前已经足够成熟,等等。 / p>

    当然,如果我们重复使用的所有代码都能很好地工作,并且具有全面的测试覆盖率,那么它被证明可以满足使用它的所有方面的需求,这些方式比不重复使用它更有效率,并且不需要经历任何设计多年来的变化,我对代码重用感到欣喜若狂。但是我的经验常常发现,在代码重用可能成为维护问题而不是解决方案的方式上,远远没有达到理想状态。

      

    您(个人和组织)如何管理您的来源   它更容易重用?您是否专门维护重用库?和   如果是这样,你如何对其进行索引以最大化你的命中率?

    所以,我再次并不寻求“最大化”代码重用在团队内部编写的专有代码中。我试图确保团队不会花费大量的金钱

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top