@vrazbros

Что такое DI инъекция зависимостей?

Как в вкратце описать суть DI инъекция зависимостей ? Хотелось бы применительно к php но не принципиально. Везде натыкаюсь на описание паттернов и статьи по 3 страницы, а как сказать суть этого термина в нескольких предложениях ?
  • Вопрос задан
  • 1460 просмотров
Решения вопроса 1
@MadridianFox
Web-программист, многостаночник
Инъекция зависимостей, это когда ты не жёстко в коде прописываешь то что один компонент использует другой, а передаёшь один компонент другому.
Конкретно:
// без DI
class Application{
     private $database;
     public function start(){
          $this->database=new Database("localhost","user","pass");
          //....
     }
}
$application = new Application();
$application->start(); 

// с DI
class Application{
     private $database;
     public fucnction __construct(Database $d){
           $this->database=$d;
     }
     public function start(){
          //....
     }
}
$application = new Application(new Database("localhost","user","pass"););
$application->start()

Таким образом создание большинства компонентов сосредотачивается в одном месте - там где запускается приложение.
Зачем?
Во первых удобно контролировать. Если мы захотим использовать вместо Database другой класс для работы с БД, мы знаем где и что поменять.
Во вторых удобно тестировать, это вытекает из первого - для юнит тестирования нам наверняка понадобится вместо Database использовать Mock объект. Ну и лёгкость замены компонента нам только на руку.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Давай объясню на примере из жизни.
Ты покупаешь Жигули, приезжаешь на нем домой, открываешь копот и видишь, о божечки, двигатель намертво приварен к кузову. Т.е он не на болтах, не на креплениях, которые можно быстро снять - а просто вшит в кузов. Ты же думал, что куплю авто и поставлю туда мотор от BMW. Чтобы это сделать, тебе надо теперь разворотить все подкапотное пространство и в прямом смысле с корнем вырвать от туда движок, причем умудриться не повредить другие системы.

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

Теперь по PHP. Ребята завода - это ты. Автомобиль - это твое веб-приложение. Двигатель - это какая-то зависимость твоего веб-приложения.

Итого - идея в том, чтобы одни компоненты слабо зависели от других. Приложение должно быть написано так, чтобы одну часть можно было подменить другой без сложностей.
Ответ написан
@sanex3339
DI это очень круто, сам на прошлой неделе его 1-й раз реализовал в своем проекте. Теперь с зависимостями работать одно удовольствие, ну и да - в тестах мокать зависимости удобно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы