【问题标题】:Duplicate Functionality Amongst Multiple Projects多个项目之间的重复功能
【发布时间】:2009-04-04 22:04:53
【问题描述】:

我目前正在开发两个社交网站,它们有很多共同点,但又截然不同。我发现自己为两者(包括 UI)编写了很多相同的代码,并且想知道是否存在限制重复代码的最佳实践。

其中一个主要问题是这些项目彼此非常独立,并且很快就会有更多的差异而不是相似之处。此外,一旦完成初始工作,它们可能会被移交给其他程序员,因此共享代码库最终可能会成为一个大问题。

可能不得不处理类似情况的人有什么建议吗?

PS:我是这两个项目的唯一开发者,而且看起来这种情况会持续一段时间。

【问题讨论】:

    标签: c# asp.net code-duplication multiple-projects


    【解决方案1】:

    将共享功能抽象回具有已定义接口和默认实现的框架或库是处理此问题的常用方法。例如,您的插件架构,如果您选择支持一个,可能是可以在您的所有项目之间共享的东西。大多数时候,您想要共享的内容是非常基本的功能或可以轻松定制的相对抽象的功能。前者更容易识别和分解到常见的库中。后者有时可能比简单地重新实现代码稍作改动(共享模式而不是代码)需要更多的工作。

    您需要注意的一件事是让实际重用驱动公共库的设计,而不是提前提出共享架构。陷入框架设计并将其抽象出来以供共享使用是非常诱人的。不幸的是,您经常发现共享使用从未开发或朝着与您预期不同的方向发展,并且您最终会重写或丢弃大部分框架 - 或者更糟糕的是,保留和维护未使用的代码。让 YAGNI(你不会需要它)作为你的向导,并延迟重构到公共库,直到你真正需要。

    【讨论】:

      【解决方案2】:

      这里有几种(至少)不同的方法,您当然可以同时使用这两种方法。首先,您可以将一些通用代码删除到一个单独的项目中,然后静态调用该代码。这很容易做到,我有时会使用简单的辅助函数来使用这种方法,这些辅助函数可能不属于我的主项目中的一个类 - 一个很好的例子是数学库或类似的东西。另一种方法是将通用功能提取到类或接口中,然后继承和扩展。根据您希望重用的代码,您可以使用这些方法中的一种(或两种)。

      我怀疑你会发现它比你想象的要容易。用一些简单的代码尝试一下,在同一个解决方案中设置一个新项目,从现有代码中引用你的库,看看它是如何进行的。也没有理由不在多个解决方案中引用您的共享项目。

      如果开发工作被移交,那么拥有共享代码库就不是问题了。目前,您可以让您的 2 个站点引用您维护的同一个库(或多个库),但如果您将项目拆分给其他团队,您可以将共享代码的副本提供给每个团队。

      【讨论】:

      • 谢谢!这对我重用的大多数功能都很有效。诸如创建个人资料缩略图的类之类的东西呢?我无法对宽度和高度参数进行硬编码,因为它们对于每个项目都不同。有没有办法一次设置这些值并在我的整个项目中使用它?
      • 几个想法 - 你仍然可以有一个通用的 Resize 函数,只传递宽度和高度,并在每个项目中将这些值保存在一个常量类中。或者您可以在运行时从配置文件中读取调整大小函数。在这种情况下,配置文件对我来说听起来不正确。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 2011-10-29
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      相关资源
      最近更新 更多