对不起,这是与建议有关的问题,而不是问题。
我想知道什么时候应该使用界面,什么时候不应该。
为了清楚说明我的问题,我将使用和不使用接口编写我当前的实现:
WITH INTERFACE
interface IObjectBuilder
{
string Build();
}
class ObjectABuilder: IObjectBuilder
{
ObjectABuilder(Object A){}
public string Build();
}
class ObjectBBuilder: IObjectBuilder
{
ObjectABuilder(Object B){}
public string Build(){}
}
没有接口1:
class ObjectABuilder
{
ObjectABuilder(Object A){}
public string Build(){}
}
class ObjectBBuilder
{
ObjectBBuilder(Object B){}
public string Build(){}
}
没有界面2:
class ObjectABuilder
{
public string Build(Object A){}
}
class ObjectBBuilder
{
public string Build(Object B){}
}
所以,我想知道,在这种情况下:
我应该使用有无界面,为什么?
对于没有接口的情况,你认为用objectA(b)构造类更好或者只是直接在方法中传递它?
提前致谢。
答案 0 :(得分:3)
您并不总是需要interface
。他们会达到你要做的一点,也许你想与另一个模块共享,你宁愿它只依赖于interface
而不是具体的实现?也许您想测试单元测试的接口实现?我会说在没有界面的情况下开始,直到你能证明你需要它为止。
对于第二个问题,班级中的其他方法是否需要Object
?如果是,那么我将在构造函数中传递它,以便这些方法可以共享Object
。如果没有,那么我会保留它。
共同主题是DTSTTCPW
答案 1 :(得分:3)
总是没有答案对所有情况都有效:
您可以阅读MSDN“开发类库设计指南”中的Choosing Between Classes and Interfaces,以获得更多信息。
然而,这些指南针对的是类库,对于其他类型的项目,指南可能或多或少有所不同。 (IE:使用DI时,有利于在类上使用接口)
使用接口“是”最佳做法,但应考虑所有注意事项,版本控制,继承,向前和向后兼容性等。
答案 2 :(得分:2)
有几个论点可以发挥作用。
如果你看一下关于设计模式的经典着作,他们会说:
编程到接口,而不是实现
这意味着当使用另一个类时,您应该只查看接口而不考虑实现。例如:
我知道类Foo上的方法Bla取决于方法Boo,所以我应该 先打电话给Boo然后再打Bla
对接口进行编程可以减少代码耦合并提高testability。 在C#中,您具有语言中接口的明确概念。使用它可以帮助您设计良好的接口并根据需要交换实现。在测试和Dependency Injection之类的东西时,接口是必须的。
但是,你也有YAGNI原则(你不需要它)。如果您的软件并不复杂,那么为什么要引入接口并使您的代码(稍微)更难开发。
答案 3 :(得分:1)
不使用接口是一个选择问题。为类创建一个接口基本上只是创建了一个用于包含类的“指南”,以便您实现从继承类继承所必需的所有属性和方法。对于更简单的类,这个问题可能并不明显,但是当你转向具有多个不间断级别的非常复杂的类时,接口确实有助于控制你的理智。