【发布时间】:2011-05-22 13:45:39
【问题描述】:
我可以理解为什么要针对接口而不是实现进行编程。但是,在下面的示例中(我发现很多):
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..
当前的例子是我的游戏中基于组件的实体系统。 (我有 IComponent、Component、PosComponent 等)。
但是,我看不出拥有 ISomething 的理由。这个名字可能看起来更好,但它似乎没有目的。我可以一直返回 BaseSomething。
当你有一个所有东西都使用的单一基本实现时,是否有理由拥有一个接口? (我可以看到 IComparable 或 IEnumerable 的用途)
编辑:对于一个稍微不同的场景(但仍然足够相关以至于不需要不同的问题),如果我假设我对所有东西都有这个结构,那么如果我将ISomething 用于参数类型和变量与BaseSomething相比?
【问题讨论】:
-
如果只有一个实现,是的,从实际的角度来看,你真的不需要接口。但是,问问自己:是这样吗?如果事实证明不是,你是否愿意检查整个代码库?
-
这是一个新项目,所以几乎还没有完成。我已经以这种方式工作了一段时间,只是刚刚开始怀疑它。如果我有一个现有的代码库,我不会打扰。
标签: c# design-patterns interface implementation