SlideShare a Scribd company logo
Dependency injection
outsourcing development
quazar.dn.ua
Стадник Андрей
Drupal & Symfony Developer
Dependency Injection
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Зависимость
Зависимость
Проблемы зависимостей
● Невозможность Unit тестирования
● Постоянный рефакторинг при малейшем
изменении структуры зависимости
● Невозможность использование интерфейсов
Рефакторинг
Другая проблема
Для работы с классом нужно
не забыть о всех его зависимостях,
и вызвать соответствующие set методы!
Как всего этого избежать?
Dependency Injection спешит на
помощь
Inversion of Control (инверсия
управления)
● Factory Method
● Service Locator
● Dependency Injection
Реализации Dependency injection
● Phemto
● Pimple
● Symfony 2 Dependency
Injection
Способы внедрения
●Внедрение в конструкторе - сonstructor Injection
●Внедрение в методе - setter Injection
●Внедрение в свойство - Property Injection
Setter injection
Constructor injection
Конфигурирование
Yaml конфиг:
Конфигурирование
PHP конфиг:
Scopes
● container (по умолчанию): Одна итаже
instance объекта в любое время
● prototype: Каждый раз новая instance
● request – каждый подзапрос новая instance
Фабрики крестьянам
Dependency Injection Andrey Stadnik(enemis)
Parent Service
Composer.phar
Последние приготовление
Использование
IoC & Di – все проблемы решены?
Плюсы:
Минусы:
● Отсутствие зависимостей
● Легкость тестирования
● Очень высокий уровень абстракций
●Легкость расширения замены любых компонентов
● Резкое снижение производительности
● Более высокая стоимость разработки
Практический пример DI
Service custom serializer
Serializer workflow
Кодинг :)
Serializer.yml
Компилирование контейнера
Проходит в несколько проходов основано на интерфейсе
CompilerPassInterface
Необходимо для:
Убирание зацикливания
Убирание из общего контейнера приватных и
абстрактных сервисов
Добавление алиасов
Определения тегированных сервисов
Пример реализации прохода
компилятора
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Dependency Injection Andrey Stadnik(enemis)
Стадник Андрей
Symfony & Drupal developer
Mail:enemis@mail.ru
Skype:enemis-87
quazar.dn.ua

More Related Content

Dependency Injection Andrey Stadnik(enemis)