SlideShare a Scribd company logo
1 of 33
Dependency Injection
И ничего лишнего
Pavel Usachev
Задача: В большинстве веб приложений нам
нужно управлять пользовательскими настройками
Устанавливать язык пользователя
Или проверять аутентифицированы пользователь
или нет
Пользовательские доступы
…
Pavel Usachev
Пользовательская информация должна передаваться между HTTP запросами
Мы будем использовать PHP сессию в качестве хранилища
Pavel Usachev
Pavel Usachev
Очень трудно
вносить
изменения
Но очень легко
использовать
Pavel Usachev
Облегчает
настройку
Немного
сложнее в
использовании
Pavel Usachev
И ничего больше
Это и есть Dependency Injection
Pavel Usachev
Давайте попробуем понять, почему первый пример был плохой?
Pavel Usachev
Я хочу изменить имя сессии
Pavel Usachev
«Хардкод»
прямо в классе
User
Pavel Usachev
Добавить
глобальную
конфигурацию?
Pavel Usachev
Передавать
конфигурацию через
класс User?
Pavel Usachev
Может быть
передавать
конфигурацию
через массив?
Pavel Usachev
Я хочу иметь возможность использовать различные хранилища
Filesystem
MySql
Memcached
…
Pavel Usachev
Может быть
использовать
объект Registry?
Pavel Usachev
Что же, теперь User зависит от Registry
Pavel Usachev
Внедрим зависимость Storage в объект User
Вместо того чтобы использовать зависимость
Storage внутри конструктора класса User
Pavel Usachev
Pavel Usachev
Какие мы получили преимущества?
Pavel Usachev
Возможность использования различных стратегий хранилища данных
Pavel Usachev
Использование другого
механизма хранения
данных
Pavel Usachev
Конфигурация стала более естественной
Pavel Usachev
Более
естественная
конфигурация
Pavel Usachev
Добавление «обертки» при использование сторонних классов (Interface / Adapters)
Pavel Usachev
Добавление
Интерфейса
Реализация Dependency Inversion
Pavel Usachev
Создание фиктивного объекта для тестирования
Pavel Usachev
Имитация Session
Pavel Usachev
Использование различных вариантов хранилища данных
Более естественная конфигурация
спользование «обертки» для сторонних классов(Interface / Adapte
Имитация объекта Storage (для тестирования)
И главное, все это без изменения User класса
Pavel Usachev
ction is where components are given their dependencies thought their constructors, methods, or d
При настоящем внедрении зависимости объект
пассивен и не предпринимает вообще никаких шагов
для выяснения зависимостей, а предоставляет для
этого сеттеры и/или принимает своим конструктором
аргументы, посредством которых внедряются
зависимости[
Pavel Usachev
Pavel Usachev
На этом и закончим.
Pavel Usachev
Источники
https://www.slideshare.net/fabpot/dependency-
injection
http://php-di.org/doc/understanding-di.html
https://ru.wikipedia.org/wiki/Внедрение_зависимост
и
Pavel Usachev
Dependency injection

More Related Content

What's hot

Техническая разработка сайтов
Техническая разработка сайтовТехническая разработка сайтов
Техническая разработка сайтовОльга Куликова
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsGeeksLab Odessa
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Technopark
 
Урок 36: Хостинг: устройство, технологии - Лукьянчук Алексей
Урок 36: Хостинг: устройство, технологии - Лукьянчук АлексейУрок 36: Хостинг: устройство, технологии - Лукьянчук Алексей
Урок 36: Хостинг: устройство, технологии - Лукьянчук АлексейЛеонид Гроховский
 
Baseof servletsjava intro
Baseof servletsjava introBaseof servletsjava intro
Baseof servletsjava introalexey1991
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...CocoaHeads
 
как вставить презентацию на сайт
как вставить презентацию на сайткак вставить презентацию на сайт
как вставить презентацию на сайтСергей Савченко
 
ошибки Word press
ошибки Word pressошибки Word press
ошибки Word pressDyadya Lesha
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsLEDC 2016
 
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016Alexander Leyn
 

What's hot (10)

Техническая разработка сайтов
Техническая разработка сайтовТехническая разработка сайтов
Техническая разработка сайтов
 
Асинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.jsАсинхронность и параллелизм в Node.js
Асинхронность и параллелизм в Node.js
 
Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4Информационная безопасность весна 2013 лекция 4
Информационная безопасность весна 2013 лекция 4
 
Урок 36: Хостинг: устройство, технологии - Лукьянчук Алексей
Урок 36: Хостинг: устройство, технологии - Лукьянчук АлексейУрок 36: Хостинг: устройство, технологии - Лукьянчук Алексей
Урок 36: Хостинг: устройство, технологии - Лукьянчук Алексей
 
Baseof servletsjava intro
Baseof servletsjava introBaseof servletsjava intro
Baseof servletsjava intro
 
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
Встреча №8. RESTful клиент — это просто. Тонкости использования RestKit, Миха...
 
как вставить презентацию на сайт
как вставить презентацию на сайткак вставить презентацию на сайт
как вставить презентацию на сайт
 
ошибки Word press
ошибки Word pressошибки Word press
ошибки Word press
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tipsКостянтин Чаус — Monitoring of huge Drupal site. Tools and tips
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
 
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
Ложка дёгтя – Александр Лэйн, QIWI, Zabbix Moscow Meetup 2016
 

Dependency injection