针对仅具有实现所述接口的一个类的接口进行编程

The*_*uck 3 c# implementation design-patterns interface

我可以理解为什么要针对接口而不是实现进行编程.但是,在以下示例中(我发现了很多):

public interface ISomething
{
    void BlahOne(int foo);
    void BlahTwo(string foo);
}

public class BaseSomething : ISomething
{
    public void BlahOne(int foo)
    {
        //impl 
    }

    public void BlahTwo(string foo)
    {
        //impl
    }
}

public class SpecificSomethingOne : BaseSomething
{
    public void SpecificOne()
    {
        //blah
    }
}

public class SpecificSomethingTwo : BaseSomething
//and on..
Run Code Online (Sandbox Code Playgroud)

目前的例子是我游戏中基于组件的实体系统.(我有IComponent,Component,PosComponent等).

但是,我看不出有ISomething的理由.名称可能看起来更好,但它似乎没有目的.我可以一直返回BaseSomething.

当你有一个基本实现一切使用时,有没有理由有一个接口?(我可以看到IComparable或IEnumerable的用途)

编辑:对于略有不同的情况(但仍然相关,不需要一个不同的问题),如果我假设我有所有的这个结构,如果我ISomething用于参数类型和变量相比,会有很大的区别BaseSomething吗?

And*_*bel 13

我更喜欢"懒惰设计" - 从BaseSomething您需要时提取界面.在此之前,请保持简单并跳过它.

现在我可以想到只有一个实现时有一个接口的两个原因:

  • 单元测试还有另一个模拟实现(即有第二个实现,但不在生产代码中).
  • 接口和实现在不同的类库中定义.例如,在使用Model-View-Presenter模式时,视图可以驻留在.exe项目中,该项目依赖于实现演示者的.dll.然后可以将IView接口放入.dll和演示者对通过依赖注入提供的视图的引用.