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

  Рет қаралды 5,178

AvitoTech

AvitoTech

Күн бұрын

Пікірлер: 6
@sergeypoprygin2670
@sergeypoprygin2670 Жыл бұрын
я так и не понял, какая разница между конструктор и интерфейс инджекшен, мне вот всегда казалось, что интерфейс инджекшен - это то же, что и сеттер инджекшен, но вот только методы для зависимости описываются на уровне абстракции, к примеру есть интерфейс LoggerAwareInterface, в нем есть метод setLogger и di механизм после создания нового обьекта проверяет, если созданный обьект имплементит LoggerAwareInterface, то di механизм инджектит новосозданному обьекту обьект логгера через метод setLogger, в зенд фремворке вроде были обьекты инициалайзеры, которые вызывались сразу после создания нового обьекта в di механизме и занимались похожими действиями
@AvitoTech
@AvitoTech Жыл бұрын
Добрый день! В первоисточнике martinfowler.com/articles/injection.html#InterfaceInjection Мартин Фаулер приводит пример. В нём он создаёт класс, который имплементирует интерфейс и затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам. На наш взгляд идея получилась достаточно абстрактной, поэтому в разных языках программирования и библиотеках реализация данного подхода происходит по-разному. К сожалению, из-за этого нам было сложно обобщить исходный пример и реальные реализации, используемые разработчиками.
@sergeypoprygin2670
@sergeypoprygin2670 Жыл бұрын
@@AvitoTech >затем в конфигурационном контейнере регистрирует классы, которые затем будут автоматически находиться и подставляться в зависимости по их сигнатурам в контейнере регистрируется класс, который сам будет инджектить зависимость новосозданому обьекту, инджектор, в моем примере это инициалайзер, у Фаулера в статье это FinderFilenameInjector, который инджектит строку через метод интерфейса injectFilename обьекту Object target
@VorobyevAlexander
@VorobyevAlexander Жыл бұрын
Чаще через конструктор. Иногда, когда конструктор получается с большим числом параметров, создаю специальный контейнер , с геттерами. И передаю только его. За счет этого возможна и ленивая инициализация.
@Varkatel
@Varkatel Жыл бұрын
Мартин Фаулер и Роберт Мартин - это три разных человека
@РоманЛукьянов-ю8р
@РоманЛукьянов-ю8р Жыл бұрын
Не очень понятный пример для Interface injection.
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН
Dependency Injection простыми словами
18:17
devschacht “Девшахта”
Рет қаралды 88 М.
LLM + RAG: ингредиенты приготовления умного ИИ-ассистента
31:48
Клуб разработчиков СПб
Рет қаралды 1,9 М.
My scorpion was taken away from me 😢
00:55
TyphoonFast 5
Рет қаралды 2,7 МЛН