假设C#
上的程序(或任何其他语言具有接口的抽象),其中第一部分(A)和第二部分(B)取决于第三部分(C )。例如,假设Visual Studio解决方案包含三个项目,其中项目A中的类ClassA
和项目B中的ClassB
依赖于项目C中的ClassC
实例。我想将接口与实现分开,所以我创建了界面IClassC
并在ClassA
和ClassB
中使用它。我应该在哪个项目中声明接口IClassC
?
答案 0 :(得分:2)
听起来ProjectC不依赖于ProjectA或ProjectB,但显然需要了解接口(以便类可以实现它)。因此 在ProjectC或每个项目所依赖的其他项目中。 (你可能只有一个单独的项目用于接口,但我很少发现它有用。)
答案 1 :(得分:1)
在Project C中,或单独的接口项目Project I
答案 2 :(得分:1)
大多数情况下它都在项目C中,但如果你想组装是可插件的,那就意味着你可以改变接口C的实现。你不想重新构建项目A和B更改项目C中的代码的时间。
在这种情况下,您需要将DIP principle应用于逆依赖,因此接口C应该在新的项目调用IC中。依赖关系将从:
更改A -> C
B -> C
要:
C -> IC
A -> IC
B -> IC
因此,当您使用C语言更改代码或使用C'替换C时,它也不会影响A和B.
答案 3 :(得分:0)
你可以在ClassC项目中声明它,从引用的角度来看这没什么问题。
您也可以将它放在自己的接口项目中,这样您就可以在例如测试项目中单独引用接口。