Post on 02-Jul-2015
description
Dependency injection
outsourcing development
quazar.dn.ua
Стадник АндрейDrupal & Symfony Developer
Dependency Injection
Зависимость
Зависимость
Проблемы зависимостей
● Невозможность 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
Фабрики крестьянам
Parent Service
Composer.phar
Последние приготовление
Использование
IoC & Di – все проблемы решены?
Плюсы:
Минусы:
● Отсутствие зависимостей
● Легкость тестирования
● Очень высокий уровень абстракций
●Легкость расширения замены любых компонентов
● Резкое снижение производительности
● Более высокая стоимость разработки
Практический пример DIService custom serializer
Serializer workflow
Кодинг :)
Serializer.yml
Компилирование контейнера
Проходит в несколько проходов основано на интерфейсе
CompilerPassInterface
Необходимо для:
Убирание зацикливания
Убирание из общего контейнера приватных и абстрактных сервисов
Добавление алиасов
Определения тегированных сервисов
Пример реализации прохода компилятора
Стадник АндрейSymfony & Drupal developer
Mail:enemis@mail.ruSkype:enemis-87
quazar.dn.ua