2

假设一个程序C#(或任何其他具有接口抽象的语言)的第一部分(A)和第二部分(B)依赖于第三部分(C)。例如,假设具有三个项目的 Visual Studio 解决方案,其中ClassA项目 A 和ClassB项目 B 中的类依赖ClassC于项目 C 中的实例。我想将接口与实现分开,以便我创建接口并在andIClassC中使用它。我应该在哪个项目中声明接口?ClassAClassBIClassC

4

4 回答 4

2

听起来 ProjectC 不依赖于 ProjectA 或 ProjectB,但显然需要了解接口(以便类可以实现它)。因此它必须在 ProjectC 或每个项目所依赖的其他项目中。(您可以为接口创建一个单独的项目,但我很少发现它很有用。)

于 2012-09-21T10:27:10.057 回答
1

在项目 C 中,或单独的接口项目项目 I

于 2012-09-21T10:26:16.050 回答
1

大多数情况下它会在项目 C 中,但是如果您希望程序集是可插件的,这意味着您可以更改接口 C 的实现。并且您不想每次都重新构建项目 A 和 B更改项目 C 中的代码。

在这种情况下,您需要将DIP 原理应用于反向依赖,因此接口 C 应该在新项目调用 IC 中。依赖关系将从:

A -> C
B -> C

到:

C -> IC
A -> IC
B -> IC

所以通过这种方式,当你更改 C 中的代码或将 C 替换为 C' 时,它也不会影响到 A 和 B。

于 2012-09-21T11:10:45.603 回答
0

您可以在 ClassC 项目中声明它,从引用的角度来看这很好。

您也可以将它放在它自己的接口项目中,这样您就可以在例如测试项目中单独引用该接口。

于 2012-09-21T10:28:09.233 回答