声明界面的地方

时间:2012-09-21 10:24:25

标签: c# design-patterns

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

4 个答案:

答案 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项目中声明它,从引用的角度来看这没什么问题。

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