SlideShare a Scribd company logo
outsourcing development
quazar.dn.ua

Dependency injection

Стадник Андрей
Drupal & Symfony Developer
На повестке дня:
1.
2.

3.
4.

Немного истории
Зависимости
Внедрение зависимостей
Примеры кода
Немного истории
Spaghetti Code или Начало PHP
Плюсы:


Нет

Минусы:
Извилистый и запутанный код
 HTML и запросы в функциях




Невозможность повторного использования кода



Высокая стоимость расширения



Трудность тестирования
Немного истории
Процедурный код или средневековье

Плюсы:

Хорошо структурированный код
 Логическое разделение




Придумали Друпал ;)



Возможность повторного кода

Минусы:
Невозможность абстрагироваться
Отсутствие инкапсуляции
Отсутствие локализации кода
Сложный порог вхождения(да да, это о Друпале)
Немного истории
Плюсы:

ООП или настоящее

Абстракции
 Локализация кода




Инкапсуляци, полиморфизм, наследование



Возможность повторного использования кода



Юнит тестирование

Минусы:


Большие библиотеки классов



Излишняя универсальность



Снижение производительности



Зависимости
Схема приложения
Зависимость
Зависимость
Проблемы зависимостей







Невозможность 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


Constructor injection

Setter injection
Конфигурирование
Yaml конфиг
Конфигурирование
PHP конфиг:
Последние приготовление
Использование
Немного истории
Плюсы:



IoC & DI – ближайшее будущее

Отсутствие зависимостей
 Легкость тестирования






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

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

Минусы:


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



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

Что же будет дальше?!
Что не освещено?









Компилирование контейнера
Тегированные сервисы
Наследование сервисов
Области видимости сервисов(Scope)
Фабрики сервисов
Ленивые сервисы
…..
Dependency Injection в Drupal 8
Стадник Андрей
Symfony & Drupal developer
Mail:enemis@mail.ru
Skype:enemis-87
quazar.dn.ua

More Related Content

What's hot

Функциональное тестирование. Семейство продуктов Selenium
Функциональное тестирование. Семейство продуктов SeleniumФункциональное тестирование. Семейство продуктов Selenium
Функциональное тестирование. Семейство продуктов SeleniumStanislav Korchagin
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияzheldak
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибок
SQALab
 
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
PCampRussia
 
сергей андреев
сергей андреевсергей андреев
сергей андреевAlexei Lupan
 
юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование ForkSergey Oreshkov
 
Профессиональное управление распределенными проектами
Профессиональное управление распределенными проектамиПрофессиональное управление распределенными проектами
Профессиональное управление распределенными проектами
Evgeny Savitsky
 
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
QA Club Minsk
 
About Testers
About TestersAbout Testers
About Testersantsh
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышленияAndrei Zubov
 

What's hot (13)

Функциональное тестирование. Семейство продуктов Selenium
Функциональное тестирование. Семейство продуктов SeleniumФункциональное тестирование. Семейство продуктов Selenium
Функциональное тестирование. Семейство продуктов Selenium
 
Ошибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы примененияОшибки начинающих Tdd практиков, плюсы применения
Ошибки начинающих Tdd практиков, плюсы применения
 
Tdd from the middle
Tdd from the middleTdd from the middle
Tdd from the middle
 
Андрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибокАндрей Уразов - Методы раннего обнаружения ошибок
Андрей Уразов - Методы раннего обнаружения ошибок
 
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
Оценка продукта на стадиях закрытого и открытого тестирования (Светлана Полов...
 
Sqa8 urazov
Sqa8 urazovSqa8 urazov
Sqa8 urazov
 
сергей андреев
сергей андреевсергей андреев
сергей андреев
 
юнит тестирование Fork
юнит тестирование Forkюнит тестирование Fork
юнит тестирование Fork
 
Авиком
АвикомАвиком
Авиком
 
Профессиональное управление распределенными проектами
Профессиональное управление распределенными проектамиПрофессиональное управление распределенными проектами
Профессиональное управление распределенными проектами
 
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
Брич Наталья - Невыносимая переносимость кроссплатформенных приложений на при...
 
About Testers
About TestersAbout Testers
About Testers
 
Автотесты и образ мышления
Автотесты и образ мышленияАвтотесты и образ мышления
Автотесты и образ мышления
 

Similar to Di

Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
OWASP Russia
 
Antipatterns in software (ru)
Antipatterns in software (ru)Antipatterns in software (ru)
Antipatterns in software (ru)
Borys Lebeda
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Technopark
 
Тестирование осень 2013 лекция 4
Тестирование осень 2013 лекция 4Тестирование осень 2013 лекция 4
Тестирование осень 2013 лекция 4Technopark
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
EatDog
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7
Pavel Veinik
 
Parallelization of tests with SeleniuGrid
Parallelization of tests with SeleniuGridParallelization of tests with SeleniuGrid
Parallelization of tests with SeleniuGridOleksii Zozulenko
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
Bubon Makabra
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
Alexander Gornik
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
Serhiy Kalinets
 
PVS-Studio в 2021
PVS-Studio в 2021PVS-Studio в 2021
PVS-Studio в 2021
Andrey Karpov
 
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
COMAQA.BY
 
Кто сказал «WAF»?
Кто сказал «WAF»?Кто сказал «WAF»?
Кто сказал «WAF»?
Positive Development User Group
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
AlexeyParhomenko
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
Образовательные мероприятия "Netpeak Talks"
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...lshevtsov
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
SQALab
 
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Dev_Party
 

Similar to Di (20)

Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
[1.4] «Ой, не шмогла». Обзор ограничений современных технологий в области ...
 
Antipatterns in software (ru)
Antipatterns in software (ru)Antipatterns in software (ru)
Antipatterns in software (ru)
 
Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2Тестирование весна 2014 смешанное занятие 2
Тестирование весна 2014 смешанное занятие 2
 
Тестирование осень 2013 лекция 4
Тестирование осень 2013 лекция 4Тестирование осень 2013 лекция 4
Тестирование осень 2013 лекция 4
 
OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.OWASP: безопасное программирование на PHP.
OWASP: безопасное программирование на PHP.
 
Software craftsmanship 7
Software craftsmanship 7Software craftsmanship 7
Software craftsmanship 7
 
Parallelization of tests with SeleniuGrid
Parallelization of tests with SeleniuGridParallelization of tests with SeleniuGrid
Parallelization of tests with SeleniuGrid
 
Test framework grid_ant_testng
Test framework grid_ant_testngTest framework grid_ant_testng
Test framework grid_ant_testng
 
Как спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важноКак спроектировать хороший API и почему это так важно
Как спроектировать хороший API и почему это так важно
 
разработка бизнес приложений (7)
разработка бизнес приложений (7)разработка бизнес приложений (7)
разработка бизнес приложений (7)
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
PVS-Studio в 2021
PVS-Studio в 2021PVS-Studio в 2021
PVS-Studio в 2021
 
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
COMAQA.BY Conf #2: "Codeception + PHP for QA Automation", Евгений Борисик, CO...
 
Кто сказал «WAF»?
Кто сказал «WAF»?Кто сказал «WAF»?
Кто сказал «WAF»?
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
 
Решения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе SeleniumРешения для автоматизации тестирования Web-приложений на базе Selenium
Решения для автоматизации тестирования Web-приложений на базе Selenium
 
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
Андрей Валдуев, Playrix — Основы тестирования и примеры использования базовых...
 

Di