36
Dependency injection outsourcing development quazar.dn.ua Стадник Андрей Drupal & Symfony Developer

Dependency Injection Andrey Stadnik(enemis)

  • Upload
    -

  • View
    245

  • Download
    0

Embed Size (px)

DESCRIPTION

Dependency injection Donetsk Drupal Camp april 2014

Citation preview

Page 1: Dependency Injection Andrey Stadnik(enemis)

Dependency injection

outsourcing development

quazar.dn.ua

Стадник АндрейDrupal & Symfony Developer

Page 2: Dependency Injection Andrey Stadnik(enemis)

Dependency Injection

Page 3: Dependency Injection Andrey Stadnik(enemis)
Page 4: Dependency Injection Andrey Stadnik(enemis)
Page 5: Dependency Injection Andrey Stadnik(enemis)

Зависимость

Page 6: Dependency Injection Andrey Stadnik(enemis)

Зависимость

Page 7: Dependency Injection Andrey Stadnik(enemis)

Проблемы зависимостей

● Невозможность Unit тестирования

● Постоянный рефакторинг при малейшем изменении структуры зависимости

● Невозможность использование интерфейсов

Page 8: Dependency Injection Andrey Stadnik(enemis)

Рефакторинг

Page 9: Dependency Injection Andrey Stadnik(enemis)

Другая проблема

Для работы с классом нужно не забыть о всех его зависимостях, и вызвать соответствующие set методы!

Как всего этого избежать?

Page 10: Dependency Injection Andrey Stadnik(enemis)

Dependency Injection спешит на помощь

Page 11: Dependency Injection Andrey Stadnik(enemis)

Inversion of Control (инверсия управления)

●Factory Method● Service Locator● Dependency Injection

Page 12: Dependency Injection Andrey Stadnik(enemis)

Реализации Dependency injection

● Phemto● Pimple● Symfony 2 Dependency Injection

Page 13: Dependency Injection Andrey Stadnik(enemis)

Способы внедрения●Внедрение в конструкторе - сonstructor Injection●Внедрение в методе - setter Injection●Внедрение в свойство - Property Injection

Setter injection

Constructor injection

Page 14: Dependency Injection Andrey Stadnik(enemis)

КонфигурированиеYaml конфиг:

Page 15: Dependency Injection Andrey Stadnik(enemis)

КонфигурированиеPHP конфиг:

Page 16: Dependency Injection Andrey Stadnik(enemis)

Scopes

● container (по умолчанию): Одна итаже instance объекта в любое время

● prototype: Каждый раз новая instance● request – каждый подзапрос новая instance

Page 17: Dependency Injection Andrey Stadnik(enemis)

Фабрики крестьянам

Page 18: Dependency Injection Andrey Stadnik(enemis)
Page 19: Dependency Injection Andrey Stadnik(enemis)

Parent Service

Page 20: Dependency Injection Andrey Stadnik(enemis)

Composer.phar

Page 21: Dependency Injection Andrey Stadnik(enemis)

Последние приготовление

Page 22: Dependency Injection Andrey Stadnik(enemis)

Использование

Page 23: Dependency Injection Andrey Stadnik(enemis)

IoC & Di – все проблемы решены?

Плюсы:

Минусы:

● Отсутствие зависимостей

● Легкость тестирования

● Очень высокий уровень абстракций

●Легкость расширения замены любых компонентов

● Резкое снижение производительности

● Более высокая стоимость разработки

Page 24: Dependency Injection Andrey Stadnik(enemis)

Практический пример DIService custom serializer

Page 25: Dependency Injection Andrey Stadnik(enemis)

Serializer workflow

Page 26: Dependency Injection Andrey Stadnik(enemis)

Кодинг :)

Page 27: Dependency Injection Andrey Stadnik(enemis)

Serializer.yml

Page 28: Dependency Injection Andrey Stadnik(enemis)

Компилирование контейнера

Проходит в несколько проходов основано на интерфейсе

CompilerPassInterface

Необходимо для:

Убирание зацикливания

Убирание из общего контейнера приватных и абстрактных сервисов

Добавление алиасов

Определения тегированных сервисов

Page 29: Dependency Injection Andrey Stadnik(enemis)

Пример реализации прохода компилятора

Page 30: Dependency Injection Andrey Stadnik(enemis)
Page 31: Dependency Injection Andrey Stadnik(enemis)
Page 32: Dependency Injection Andrey Stadnik(enemis)
Page 33: Dependency Injection Andrey Stadnik(enemis)
Page 34: Dependency Injection Andrey Stadnik(enemis)
Page 35: Dependency Injection Andrey Stadnik(enemis)
Page 36: Dependency Injection Andrey Stadnik(enemis)

Стадник АндрейSymfony & Drupal developer

Mail:[email protected]:enemis-87

quazar.dn.ua