SlideShare a Scribd company logo
1 of 42
www.ciklum.net



Dependency Injection

                    Pavel Voznenko
      PHP Developer, CSC Project Office
Мы сегодня поговорим о...




1. Dependency
2. Inversion of Control
3. Dependency Injection
4. DI Container
5. DI Containers (Phemto)




                  www.ciklum.net   2
Dependency
 Зависимость




    www.ciklum.net   3
Зависимость




         www.ciklum.net   4
Зависимость




 Dependency
  Detected!


         www.ciklum.net   5
Зависимость




  UserClass()

       DbClass()

         www.ciklum.net   6
Зависимость




- Class
- Interface

                       www.ciklum.net   7
Зависимость




                          0_о?
         www.ciklum.net          8
Чем плоха зависимость?



1. Сложность в тестировании
2. Критерии по Роберту Мартину:
 • Жесткость - изменения влекут за собой другие изменения
 • Хрупкость - изменения вызывают поломку
 • Неподвижность - нельзя использовать повторно
 • Вязкость архитектуры - проще писать «плохой» код чем
 «хороший»




                         www.ciklum.net                     9
Inversion of Control
 Инверсия управления




        www.ciklum.net   10
Принцип инверсии зависимостей




    Модули верхнего уровня
 не должны зависеть от
    модулей нижних уровней



                  www.ciklum.net   11
Техники реализации




1. Factory method
2. Service Locator
3. Dependency Injection



                www.ciklum.net   12
Dependency Injection
 Внедрение зависимостей




          www.ciklum.net   13
Внедрение зависимостей - это...




            Настройка объекта         извне
с помощью   передачи зависимых объектов
      через конструктор (метод, атрибут)




                     www.ciklum.net           14
Внедрение зависимостей




              www.ciklum.net   15
Зависимости



UserClass      Session               Db


        Внедрение




   Db           Session           UserClass


                 www.ciklum.net               16
Способы внедрения зависимостей




- Constructor Injection (через конструктор)
- Setter Injection (через метод)
- Property Injection (через атрибут)




                     www.ciklum.net           17
Constructor Injection




              www.ciklum.net   18
Setter Injection




            www.ciklum.net   19
Property Injection




             www.ciklum.net   20
Еще один пример DI




            www.ciklum.net   21
Еще один пример DI




            www.ciklum.net   22
Простое тестирование




             www.ciklum.net   23
Чем хороша внедрения
          зависимостей?

1. Возможность тестирования любого класса в
иерархии зависимостей
2. Принцип единой ответственности
3. Критерии по Роберту Мартину:
 • Жесткость - изменения не влекут за собой другие
 изменения
 • Хрупкость - изменения не вызывают поломку
 • Неподвижность - можно использовать повторно
 • Вязкость архитектуры - нужно писать хороший код!

                        www.ciklum.net               24
DI Контейнер



    www.ciklum.net   25
Зависимость объектов




UserClass       Session           Db




               UserClass
                Session
                       Db


                 www.ciklum.net        26
Порядок внедрения зависимостей




   DI Container                    1. Db


                                   2. Session


                                   3. UserClass




                  www.ciklum.net                  27
Простой контейнер




            www.ciklum.net   28
Чего не хватает?




- Гибкости
- Возможности настраивать




                www.ciklum.net   29
Простой контейнер Фабиена




                www.ciklum.net   30
Простой контейнер Фабиена




                www.ciklum.net   31
Есть одно но




Контейнер может стать
      избыточным
          www.ciklum.net   32
DI Контейнеры



     www.ciklum.net   33
DI Контейнеры




- Symfony Dependency Injection
- Pico Container
- Phemto
- и другие :)




                   www.ciklum.net   34
Phemto



 www.ciklum.net   35
Phemto



– автор Маркус Бэйкер
– сайт проекта: http://phemto.sourceforge.net
– это легкий, автоматизированный DI
контейнер (всего три файла)
– выявление всех зависимостей
объекта



                      www.ciklum.net        36
Phemto




         www.ciklum.net   37
Phemto




         www.ciklum.net   38
Phemto




         www.ciklum.net   39
Phemto




Контроль жизненного цикла объектов:
- Всегда создает новый экземпляр объекта
- Отдает ссылки на один и тот же экземпляр
- Хранит экземпляр объекта в системной
переменной PHP $_SESSION




                     www.ciklum.net          40
Полезные ссылки

- Martin Fowler:
    http://ow.ly/99dmF
- Fabien Potencier:
    http://ow.ly/99dmX
    http://ow.ly/99dnd
- Robert C. Martin:
    http://ow.ly/99doa
- Phemto:
    http://phemto.sourceforge.net




                           www.ciklum.net   41
Спасибо Вам!
 Можно задавать вопросы

                     - P-URL: http://ow.ly/99dvA
                     - Skype: p.voznenko
                     - Twitter: pvoznenko
                     - E-mail: p.voznenko@gmail.com

         www.ciklum.net                          42

More Related Content

Viewers also liked

Dependency Injection in PHP
Dependency Injection in PHPDependency Injection in PHP
Dependency Injection in PHPKacper Gunia
 
Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Fabien Potencier
 
Тестирование безопасности: PHP инъекция
Тестирование безопасности: PHP инъекцияТестирование безопасности: PHP инъекция
Тестирование безопасности: PHP инъекцияSQALab
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great InfographicsSlideShare
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShareKapost
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareEmpowered Presentations
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation OptimizationOneupweb
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingContent Marketing Institute
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksSlideShare
 

Viewers also liked (10)

Dependency Injection in PHP
Dependency Injection in PHPDependency Injection in PHP
Dependency Injection in PHP
 
Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3Dependency Injection with PHP 5.3
Dependency Injection with PHP 5.3
 
Тестирование безопасности: PHP инъекция
Тестирование безопасности: PHP инъекцияТестирование безопасности: PHP инъекция
Тестирование безопасности: PHP инъекция
 
What Makes Great Infographics
What Makes Great InfographicsWhat Makes Great Infographics
What Makes Great Infographics
 
Masters of SlideShare
Masters of SlideShareMasters of SlideShare
Masters of SlideShare
 
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to SlideshareSTOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
STOP! VIEW THIS! 10-Step Checklist When Uploading to Slideshare
 
You Suck At PowerPoint!
You Suck At PowerPoint!You Suck At PowerPoint!
You Suck At PowerPoint!
 
10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization10 Ways to Win at SlideShare SEO & Presentation Optimization
10 Ways to Win at SlideShare SEO & Presentation Optimization
 
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content MarketingHow To Get More From SlideShare - Super-Simple Tips For Content Marketing
How To Get More From SlideShare - Super-Simple Tips For Content Marketing
 
How to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & TricksHow to Make Awesome SlideShares: Tips & Tricks
How to Make Awesome SlideShares: Tips & Tricks
 

Similar to Ciklum Odessa PHP Saturday - Dependency Injection

Разбор сложных случаев OutOfMemoryError
Разбор сложных случаев OutOfMemoryErrorРазбор сложных случаев OutOfMemoryError
Разбор сложных случаев OutOfMemoryErrorVladimir Sitnikov
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)Alexey Kachayev
 
Performance optimization: effective interaction with virtual machine
Performance optimization: effective interaction with virtual machinePerformance optimization: effective interaction with virtual machine
Performance optimization: effective interaction with virtual machineReturn on Intelligence
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...CocoaHeads
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеAlexander Byndyu
 
Андрей Сибирёв "Ваше собственное облако — война за независимость"
Андрей Сибирёв "Ваше собственное облако — война за независимость"Андрей Сибирёв "Ваше собственное облако — война за независимость"
Андрей Сибирёв "Ваше собственное облако — война за независимость"Yandex
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 
A step-by-step approach toward high quality OutOfMemoryError analysis
A step-by-step approach toward high quality OutOfMemoryError analysisA step-by-step approach toward high quality OutOfMemoryError analysis
A step-by-step approach toward high quality OutOfMemoryError analysisVladimir Sitnikov
 
Основные возможности Symfony 2
Основные возможности Symfony 2Основные возможности Symfony 2
Основные возможности Symfony 2Shevchuk
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NETDotNetConf
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтендViacheslav Slinko
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Ontico
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемYandex
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемOpenVZ
 
Разработка Fast reports 2012
Разработка Fast reports 2012Разработка Fast reports 2012
Разработка Fast reports 2012Fast Reports
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machineReturn on Intelligence
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Ontico
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Dmitry Samsonov
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 

Similar to Ciklum Odessa PHP Saturday - Dependency Injection (20)

Разбор сложных случаев OutOfMemoryError
Разбор сложных случаев OutOfMemoryErrorРазбор сложных случаев OutOfMemoryError
Разбор сложных случаев OutOfMemoryError
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)DI and Zend Framework (ZFConf2011)
DI and Zend Framework (ZFConf2011)
 
Performance optimization: effective interaction with virtual machine
Performance optimization: effective interaction with virtual machinePerformance optimization: effective interaction with virtual machine
Performance optimization: effective interaction with virtual machine
 
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
Виктор Брыкcин — Как всё починить и ничего не сломать: работа со сложным кодо...
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
 
Андрей Сибирёв "Ваше собственное облако — война за независимость"
Андрей Сибирёв "Ваше собственное облако — война за независимость"Андрей Сибирёв "Ваше собственное облако — война за независимость"
Андрей Сибирёв "Ваше собственное облако — война за независимость"
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
A step-by-step approach toward high quality OutOfMemoryError analysis
A step-by-step approach toward high quality OutOfMemoryError analysisA step-by-step approach toward high quality OutOfMemoryError analysis
A step-by-step approach toward high quality OutOfMemoryError analysis
 
Основные возможности Symfony 2
Основные возможности Symfony 2Основные возможности Symfony 2
Основные возможности Symfony 2
 
Inversion of Control в .NET
Inversion of Control в .NETInversion of Control в .NET
Inversion of Control в .NET
 
Микросервисный фронтенд
Микросервисный фронтендМикросервисный фронтенд
Микросервисный фронтенд
 
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблем
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблем
 
Разработка Fast reports 2012
Разработка Fast reports 2012Разработка Fast reports 2012
Разработка Fast reports 2012
 
Performance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machinePerformance optimization effective interaction with virtual machine
Performance optimization effective interaction with virtual machine
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...Как не положить тысячи серверов с помощью системы централизованного управлени...
Как не положить тысячи серверов с помощью системы централизованного управлени...
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 

Ciklum Odessa PHP Saturday - Dependency Injection

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n