分离接口和实现

时间:2015-09-18 09:47:42

标签: c# design-patterns

假设我有一个项目A,它引用了项目B.B有一些在其中定义的类,A有一个接口ISomething,其实现位于A,并使用B< c的类。然后我想创建项目C和A&界面的另一个实现,它使用C&C的类。问题在于:我想将此接口的实现移动到相应的项目,以便我可以在构建脚本中定义要使用的项目,并省略其他项目。尽管如此,为了使用这个接口的大量现有代码,我想保存接口和它的实现之间的连接。到目前为止,我一直在考虑以下选项:

  • 在项目A中使用适配器模式,它返回ISomething,引用两个实现并在C缺失时调整B的实现,反之亦然。从我的角度来看,骗局使得所有接口实现关系都无用
  • 创建项目D,其中包含接口,并由A,B和C引用,然后在此项目中解析其实现之一的接口。项目接收具体实例并使用它。结果是我需要创建另一个库并污染存储库。

哪个选项更好,还有其他选项吗?

1 个答案:

答案 0 :(得分:2)

我肯定会参加D计划。

有时你会在解决方案中看到它,即界面甚至没有共享,或者意味着要分享,而且显然有点过分,但我会说,对于你的情况,这将是最好的方法。

现在,您可能想要做的不仅仅是将其作为dll或项目引用,因为

  1. 您必须编译并链接此项目,这需要时间。即使该项目中没有代码,也仍会出现链接时间。
  2. 您将无法轻松地对界面进行版本控制,因此在一个项目中编辑界面并进行重大更改需要立即在其他项目上进行传播,并且您不知道是否已经完成了。
  3. 为了避免这两个问题,我会在这个项目D中创建一个 NuGet 包。你不需要在NuGet.org上托管它,你可以简单地自我托管它,使用本地服务器,或者最简单的方法:通过指向本地或共享文件夹。