分离接口和实现

本文关键字:实现 接口 分离 | 更新日期: 2023-09-27 18:13:31

假设我有一个项目a,它引用了项目B。B在其中定义了一些类,而a有一个接口,它的实现位于a中,并使用B的类。然后我想创建项目C和A的接口的另一个实现,它使用C的类。问题是:我想把这个接口的实现移到相应的项目中,这样我就可以定义在构建脚本中使用哪个项目,而忽略其他项目。尽管如此,我还是想保存接口和它的实现之间的连接,因为大量已经存在的代码使用了这个接口。到目前为止,我一直在考虑以下选项:

  • 在项目A中使用适配器模式,它返回issomething,如果C缺失,则引用两个实现并适应B的实现,反之亦然。缺点是,从我的角度来看,所有接口实现关系都是无用的
  • 创建项目D,其中包含接口,并被A,B和C引用,然后在该项目中将接口解析为它的一个实现。一个项目接收具体的实例并与之一起工作。缺点是我需要创建另一个库并污染存储库。

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

分离接口和实现

我肯定会选d项目。

有时你会在接口甚至不共享的解决方案中看到它,或者打算共享,这显然是过度的,但我想说,对于你的情况,这将是最好的方法。

现在,你可能不想把它作为一个dll或项目引用,因为

  1. 你必须编译和链接这个项目,这需要时间。即使该项目中几乎没有代码,链接时间仍然会发生。
  2. 你将没有简单的方法来版本你的接口,因此在一个项目中编辑具有破坏性更改的接口将需要立即在其他项目中传播,并且你将不知道你是否已经完成了。

为了避免这两个问题,我将从这个Project d中创建一个NuGet包。您不需要在NuGet.org上托管它,您可以简单地自托管它,或者使用本地服务器,或者最简单的方法:通过指向本地或共享文件夹。