Фреймворки внедрения зависимостей:Почему меня это волнует?

StackOverflow https://stackoverflow.com/questions/952180

Вопрос

Я перечитывал Инъекция вручную и Ниндзя - секция (а также Зачем использовать Ninject ).Я столкнулся с двумя причинами замешательства:

  1. Техника ввода вручную мне уже знакома, но я не знаком с Ninjection и, следовательно, не уверен, как будет работать полная программа.Возможно, это помогло бы предоставить полную программу, а не, как это сделано на этой странице, показывать программу, разбитую на части

  2. Я все еще не совсем понимаю, как это облегчает задачу.Мне кажется, я упускаю что-то важное.Я могу отчасти понять, как фреймворк для инъекций был бы полезен, если бы вы создавали группу инъекций, а затем переключались между двумя большими группами одновременно (это полезно, среди прочего, для издевательства), но я думаю, что это нечто большее.Но я не уверен, что именно.Или, может быть, мне просто нужно больше примеров того, почему это так интересно, чтобы довести дело до конца.

Это было полезно?

Решение

При внедрении ваших зависимостей без платформы DI вы в конечном итоге получаете код со стрелками по всему вашему приложению, указывающий классам, как создавать свои зависимости.

    public Contact()
        : this(new DataGateWay())
    {
    }

Но если вы используете что-то вроде Ninject, весь код стрелки находится в одном месте, что упрощает изменение зависимости для всех классов, использующих его.

internal class ProductionModule : StandardModule
{
    public override void Load()
    {
        Bind<IDataGateway>().To<DataGateWay>();
    }
}

Другие советы

Я все еще не совсем понимаю, как это облегчает задачу.Мне кажется, я упускаю что-то важное.

Разве не было бы здорово, если бы нам приходилось разрабатывать только отдельные компоненты, каждый из которых обеспечивал бы отдельную функциональность, которую мы могли бы легко понять, повторно использовать и поддерживать.Где мы Только работал над компонентами.

Что мешает нам сделать это, так это то, что нам нужна какая-то инфраструктура, которая может каким-то образом объединять эти компоненты в работающее приложение и управлять им автоматически.Инфраструктура, которая делает это, доступна нам - фреймворк МОК.

Таким образом, фреймворк IOC не является о нас управление зависимостями, тестирование или настройка.Вместо этого это о нас управление сложностью, позволяя вам работать и думать только о компонентах.

Это позволяет вам легко тестировать свой код, имитируя интерфейсы, которые вам нужны для определенного блока кода.Это также позволяет вам легко менять функциональность, не нарушая другие части кода.

Все дело в сплоченности и сцеплении.

Вероятно, вы не увидите преимуществ в небольших проектах, но как только вы преодолеете их, это станет действительно очевидным, когда вам придется вносить изменения в систему.Это проще простого, когда вы использовали DI.

Мне действительно нравится аспект автоматической настройки некоторых фреймворков ...когда вам не нужно заботиться о том, какие ваши типы должны быть созданы.

Редактировать: Я читал эта статья написана Айенде @ Rahien.И я действительно поддерживаю его точку зрения.

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

Внедрение зависимостей может стать действительно интересным, если вы доведете свой код до такой степени, что в нем вообще будет очень мало зависимостей.Некоторые фреймворки внедрения зависимостей позволят вам определить ваши зависимости в файле конфигурации.Это может быть очень полезно, если вам нужно действительно гибкое программное обеспечение, которое необходимо изменять без изменения кода.Например, программное обеспечение для документооборота является основным кандидатом для решения такого типа.

Внедрение зависимостей необходимо для Разработка, основанная на компонентах.Последнее позволяет строить действительно сложный приложения гораздо более эффективным и надежным способом.

Кроме того, это позволяет четко отделить общие сквозные проблемы от другого кода (это приводит к более многократному использованию и гибкости кодовой базы).

Ссылки по теме:

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top