Dependency Injection in Drupal 8 - Стадник АндрейQweqwe

425 views

Published on

Попытаемся разобраться что же это такое Dependency Injection, зачем он нужен в Друпале 8. А также создадим свой супер-пупер сервис с Black Jack'ом и тестами.

Published in: Internet
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
425
On SlideShare
0
From Embeds
0
Number of Embeds
45
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Dependency Injection in Drupal 8 - Стадник АндрейQweqwe

  1. 1. Dependency injection outsourcing development quazar.dn.ua Стадник Андрей Drupal & Symfony Developer
  2. 2. Dependency Injection
  3. 3. Зависимость
  4. 4. Зависимость
  5. 5. Проблемы зависимостей ● Невозможность Unit тестирования ● Постоянный рефакторинг при малейшем изменении структуры зависимости ● Невозможность использование интерфейсов
  6. 6. Рефакторинг
  7. 7. Другая проблема Для работы с классом нужно не забыть о всех его зависимостях, и вызвать соответствующие set методы! Как всего этого избежать?
  8. 8. Dependency Injection спешит на помощь
  9. 9. Inversion of Control (инверсия управления) ● Factory Method ● Service Locator ● Dependency Injection
  10. 10. Реализации Dependency injection ● Phemto ● Pimple ● Symfony 2 Dependency Injection
  11. 11. Способы внедрения ●Внедрение в конструкторе - сonstructor Injection ●Внедрение в методе - setter Injection ●Внедрение в свойство - Property Injection Setter injection Constructor injection
  12. 12. Конфигурирование Yaml конфиг:
  13. 13. Конфигурирование PHP конфиг:
  14. 14. Scopes ● container (по умолчанию): Одна итаже instance объекта в любое время ● prototype: Каждый раз новая instance ● request – каждый подзапрос новая instance
  15. 15. Фабрики крестьянам
  16. 16. Parent Service
  17. 17. Composer.phar
  18. 18. Последние приготовление
  19. 19. Использование
  20. 20. IoC & Di – все проблемы решены? Плюсы: Минусы: ● Отсутствие зависимостей ● Легкость тестирования ● Очень высокий уровень абстракций ●Легкость расширения замены любых компонентов ● Резкое снижение производительности ● Более высокая стоимость разработки
  21. 21. Практический пример DI Service custom serializer
  22. 22. Serializer workflow
  23. 23. Кодинг :)
  24. 24. Serializer.yml
  25. 25. Компилирование контейнера Проходит в несколько проходов основано на интерфейсе CompilerPassInterface Необходимо для: Убирание зацикливания Убирание из общего контейнера приватных и абстрактных сервисов Добавление алиасов Определения тегированных сервисов
  26. 26. Пример реализации прохода компилятора
  27. 27. Стадник Андрей Symfony & Drupal developer Mail:enemis@mail.ru Skype:enemis-87 quazar.dn.ua

×