Инжекция зависимостей - зачем это нужно?
На последнем проекте у меня была задача обеспечить две, казалось бы, противоречащих функции: 1) вынести фундаментальные функции в отдельный пакет, 2) обеспечить молульность и гибкость изменений в этих функциях, 3) обеспечить возможность динамического изменения функционала.
Вы тоже это заметили? О да, две функции на три пункта 👍
И вот тут мне и пригодилась эта магия: инжекция зависимостей. Я впервые работал с этим понятием и по началу мне было сложно отличить индекцию от микросервиса - казалось бы это очень близкие понятия. И они действительно близкие, но масштабы у них разные. Микросервис - это сущность в себе, в то время как инжекция - это как переодевание: под одеждой всё тот же человек, но выглядит иначе, может разное.
Как работает инжекция под капотом я не буду сейчас разбирать, суть поста в более обзорном экскурсе.
Для работы механизма инжекции нам потребуется: 1) набор модулей/методов, помеченых пригодными к замене/инжекции 2) механизм управления процессом инжекции (это сильно облечает жизнь) 3) разработка, принятие и следование правилам.
Живой пример
Наш базовый модуль ориентирован на работу с бэком через шаред-воркер и предоставляет комплект методов, схожих с привычными нам get, post, delete, И вот вы берёте наш сервис и говорите: "а у нас все общение с беком через сокеты идет". Что тогда вам делать?
Переписать наш метод и инжектировать его. Все. Если вы обеспечили интерфейсы, то у вас всё будет работать, словно так и было задумано.
Ну вот и всё. 🤷♂️