Dependency Injection Andrey Stadnik(enemis)

Post on 02-Jul-2015

245 views 0 download

description

Dependency injection Donetsk Drupal Camp april 2014

Transcript of Dependency Injection Andrey Stadnik(enemis)

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