这两个原则之间的区别对我来说并不清楚。它们看起来就像是一样。
有什么区别?
答案 0 :(得分:5)
关于“依赖性倒置”原则的第139页“头部设计模式”一书:
依赖性倒置原则:取决于抽象。不要依赖具体的课程。
首先,这个原理听起来很像“接口的程序,而不是实现”,对吧?它是相似的;然而,依赖倒置原则对抽象做出了更为强烈的陈述。它表明我们的高级组件不应该依赖于我们的低级组件;相反,他们应该两者依赖于抽象。
“高级”组件是具有根据其他“低级”组件定义的行为的类。例如,
PizzaStore
是一个高级组件,因为它的行为是根据比萨定义的 - 它创建了所有不同的披萨对象,准备,烘焙,切割和包装它们,而它使用的披萨低 - 等级组件。
以下代码遵循“程序到接口,而不是实现”原则,因为您在抽象上调用Bake
和Deliver
。但它确实不遵循DI原则,因为您的第一个代码块仍然依赖于某些具体的Pizza
类型。
public class PizzaStore
{
public void OrderPizza(PizzaType type)
{
Pizza pizza;
switch(type)
{
case PizzaType.FourSeasons:
pizza = new FourSeasonsPizza();
//...
}
//do something with pizza
pizza.Bake();
pizza.Deliver();
}
}
通过使用工厂方法模式或抽象工厂模式,您遵循两个原则。现在你正在编写一个抽象和的编程,你完全依赖于抽象。披萨商店取决于两个抽象:Pizza
和PizzaFactory
。
public class PizzaStore
{
private PizzaFactory factory;
public PizzaStore(PizzaFactory factory)
{
this.factory = factory;
}
public void OrderPizza(PizzaType type)
{
Pizza pizza = factory.CreatePizza(type);
//do something with pizza
pizza.Bake();
pizza.Deliver();
}
}
所以是的,DI原则包括“程序到界面”原则。
答案 1 :(得分:-2)
在GoF Patterns一书中,您可以找到“interface”的定义。 对象操作定义的所有签名集称为对象的接口。 本书中的接口在.h文件中声明,并与实现分开。因此,给定原则是同义词。
不熟悉GoF Patterns一书的.NET开发人员可能会被.NET interfaces混淆。