理解控制反转(IoC)和依赖注入(DI)的好比喻是什么?

10

什么是一个好的类比来理解IoC和DI?


重复:https://dev59.com/DHRC5IYBdhLWcg3wD8xV - Mark Seemann
请参见https://dev59.com/gXI-5IYBdhLWcg3w3cg8。 - Mark Seemann
看看这个:http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html - Vishal
3个回答

7

如果以汽车为经典例子。你可以按照常规的购车流程,使用制造商提供的轮胎:

public class Fifteens
{
    public void Roll() { Console.WriteLine("Nice smooth family ride..."); }
}

public class Car
{
    Fifteens wheels = new Fifteens();

    public Car() { }

    public void Drive() { wheels.Roll; }
}

然后:

Car myCar = new Car(); 
myCar.Drive() // Uses the stock wheels 

或者你可以找到一位定制汽车建造师,让他们按照轮毂的规格制作出符合你要求的轮毂,只要它们符合轮毂的规格说明:

public interface IWheel
{
    void Roll();
}

public class Twenties : IWheel
{
    public void Roll() { Console.WriteLine("Rough Ridin'...");
}

public class Car
{
    IWheel _wheels;

    public Car(IWheel wheels) { _wheels = wheels; }

    public void Drive() { wheels.Roll(); }
}

然后:

Car myCar = new Car(new Twenties()); 
myCar.Drive(); // Uses the wheels you injected.

但现在你可以注入任何类型的轮子。请记住,这只是一种依赖注入(构造函数注入)的方式,但它是最简单的示例之一。


2

Martin Fowler在 这篇文章 中非常好地解释了这些模式。


2
有几个不同的比喻可以让我们更容易理解控制反转。我们在日常生活中以许多不同的方式体验到这一点,所以我们将其借用到代码中。其中一个比喻是军队中的“指挥链”。
这可能是与控制反转最相似的比喻。军方为每个新兵提供他在军衔上所需的基本物品,并发布必须服从的命令。同样的原则适用于代码。每个组件都由实例化实体(即此类比中的指挥官)提供其运行所需的东西。然后,实例化实体根据需要对该组件进行操作。
更多内容请参见:有人有依赖注入的好比喻吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接