2.9 Dependency Injection | Курс «Паттерны и практики написания кода»

preview_player
Показать описание
Всем привет! Это второй сезон курса о паттернах и практиках написания кода от бэкенд-инженера Авито — Юрия Афанасьева.

В девятой серии Юра расскажет о принципе Dependency Injection и четырёх вариантах его реализации: через конструктор, сеттер-методы, интерфейс и свойство. Разберём, в чём разница между принципами Dependency Injection, Dependency Inversion и Service Locator, и обсудим их плюсы и минусы.

Таймкоды:

00:00 | Вступление
00:51 | Dependency Injection
02:57 | Внедрение одних объектов в другие с помощью Dependency Injection
03:14 | Injection через конструктор
04:44 | Injection через сеттер-методы
06:21 | Injection через интерфейс
07:14 | Injection через свойство
08:43 | Разница между Dependency Injection и Dependency Inversion
09:57 | Разница между Dependency Injection и Service Locator
10:32 | Итоги

AvitoTech — это команда инженеров Авито. Подпишитесь на наш канал, соцсети и блоги, чтобы узнавать больше о технологиях Авито 👇🏻
Рекомендации по теме
Комментарии
Автор

Чаще через конструктор. Иногда, когда конструктор получается с большим числом параметров, создаю специальный контейнер, с геттерами. И передаю только его. За счет этого возможна и ленивая инициализация.

VorobyevAlexander
Автор

я так и не понял, какая разница между конструктор и интерфейс инджекшен, мне вот всегда казалось, что интерфейс инджекшен - это то же, что и сеттер инджекшен, но вот только методы для зависимости описываются на уровне абстракции, к примеру есть интерфейс LoggerAwareInterface, в нем есть метод setLogger и di механизм после создания нового обьекта проверяет, если созданный обьект имплементит LoggerAwareInterface, то di механизм инджектит новосозданному обьекту обьект логгера через метод setLogger, в зенд фремворке вроде были обьекты инициалайзеры, которые вызывались сразу после создания нового обьекта в di механизме и занимались похожими действиями

sergeypoprygin
Автор

Мартин Фаулер и Роберт Мартин - это три разных человека

Varkatel
Автор

Не очень понятный пример для Interface injection.

РоманЛукьянов-юр