多个项目中的重复功能

时间:2009-04-04 22:04:53

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

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

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

人们可能不得不处理类似情况的任何建议?

PS:我是这两个项目中唯一的开发人员,看起来它会保持这种状态。

2 个答案:

答案 0 :(得分:5)

使用已定义的接口和默认实现将共享功能抽象回框架或库是处理此问题的常用方法。例如,如果您选择支持插件体系结构,那么您的插件体系结构可能可以在所有项目之间共享。大多数情况下,您要共享的内容是非常基本的功能或相对抽象的功能,可以轻松定制。前者更易于识别和分解为常见的库。后者有时可能比简单地通过微小的更改(共享模式而不是代码)重新实现代码更多的工作。

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

答案 1 :(得分:1)

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

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

如果开发得以实现,共享代码库不一定是个问题。现在,您可以让您的2个站点引用您维护的相同库(或库),但是如果您将项目拆分到其他团队,则可以将共享代码的副本提供给每个团队。