На этой неделе я изучал использование среды Typhoon для внедрения зависимостей. Я понял, что разделение конструкции объектов полезно для замены произвольных компонентов на макеты во время модульного тестирования, и до сих пор я видел преимущества только от этого.
Но я не могу не думать, что раньше, когда у меня был огромный класс контроллера представления, который имел десятки импортируемых заголовков, теперь у меня есть огромный фабричный класс, который имеет десятки импортируемых заголовков. Должен ли я избежать массового фабричного класса?
dependency-injection
Виктор
источник
источник
Ответы:
Внедрение зависимостей просто помогает определить, как один объект знает о другом зависимом объекте. Это не поможет вам снизить общую сложность системы. Если вам нужны десятки импортов до DI, вам все равно понадобятся десятки импортов после. Разница в том, что этот импорт будет в более удобном месте (классе) (фабрика, строитель и т. Д.).
Позволяя предоставлять зависимости через конструктор или метод, вы позволяете себе гибко предоставлять другой, но все еще действительный, зависимый объект вашему классу и повышать согласованность указанного класса, устраняя проблемы.
Существует несколько принципов, которые похожи и часто используются вместе: внедрение зависимостей (DI), инверсия контроля (IoC) и принцип инверсии зависимостей (DIP)
Из этой статьи http://martinfowler.com/articles/dipInTheWild.html
источник
Внедрение зависимостей не уменьшает сложность, но повышает управляемость за счет разделения проблем и уменьшения связи.
Вы должны избегать "огромных" классов, точка. Допустим, вы разделили контроллер представления на более мелкие, более обслуживаемые классы. Теперь все они несут ответственность за свои зависимости. DI помогает вам переместить это управление зависимостями из всех этих классов в класс фабрики / конфигурации, который отвечает только за управление зависимостями - см. Принцип единой ответственности. И хотя он, безусловно, будет гораздо менее «громоздким», чем оригинальный контроллер представления, если он становится слишком большим, у вас всегда есть возможность разделить его на более мелкие классы управления зависимостями, которые отвечают за различные части приложения.
источник
По словам непрофессионала:
Инъекция зависимости перемещает сложность туда, где она приносит меньше вреда.
РЕДАКТИРОВАТЬ для @gnat: DI не просто переносит сложность в отдельный класс, он переносит его туда, где он причиняет меньше вреда.
источник