Что такое хорошая аналогия для понимания IoC и DI? - PullRequest
9 голосов
/ 20 июля 2010

Какая хорошая аналогия для понимания IoC и DI?

Ответы [ 3 ]

7 голосов
/ 20 июля 2010

Если вы берете классический пример автомобиля.Вы можете пройти обычную процедуру покупки автомобиля и взять колеса, которые производитель дает вам:

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 голосов
/ 20 июля 2010

Существует несколько различных аналогий, которые облегчают понимание инверсии контроля. Мы испытываем это по-разному в обычной жизни, поэтому мы заимствуем форму в коде. Одна аналогия называется «Цепочка командования» в армии.

Это, вероятно, самая ясная параллель с инверсией контроля. Военные предоставляют каждому новобранцу основные вещи, которые ему необходимы для работы на его звании, и выдают команды, которым новобранец должен подчиняться. Тот же принцип применяется в коде. Каждому компоненту даны положения, которыми он должен управлять, создавая объект (т. Е. Командир в этой аналогии). Инстанцирующий объект затем воздействует на этот компонент так, как ему нужно действовать.

Подробнее здесь:

У кого-нибудь есть хорошая аналогия для внедрения зависимости?

2 голосов
/ 20 июля 2010

Мартин Фаулер отлично справляется с работой , объясняя эти закономерности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...