#Dependency_Injection

2025-06-10

[Перевод] Вероятно, вам не нужен DI-фреймворк

Я считаю, что при работе с Go в контексте нашей отрасли внедрение зависимостей (dependency injection, DI) часто имеет плохую репутацию из-за DI-фреймворков . Но сама по себе DI как техника довольно полезна. Просто её объясняют слишком большим количеством ОО-жаргона, что приводит к ПТСР у тех, кто перешёл на Go, чтобы сбежать из культа банды четырёх.

habr.com/ru/articles/914876/

#внедрение_зависимостей #dependency_injection #di #зависимости #wire #dig

2025-05-31

LLM-first: парная разработка без вайбкодинга

Этот пост — мой личный разбор по итогам двух недель разработки простой файловой CMS для одного из моих пет-проектов. Мне нужен был SSR-сайт с мультиязычным контентом — около десятка страниц на двух языках. Всё под Git-контролем, переводы я делал вручную через DeepSeek API и выкладывал на продакшн через GitHub Actions. В какой-то момент стало понятно: отслеживать и переводить все мелкие изменения вручную — неудобно и утомительно. Тогда я решил автоматизировать этот процесс и взял в напарники ИИ. Не для вайбкодинга и генерации «по настроению», а для настоящего парного программирования. Результат — рабочий open-source проект, который можно развернуть, изучить и использовать. Но главное — это опыт. Это была не просто реализация CMS, а переосмысление роли ИИ в разработке. Под катом — мои подходы, наблюдения и выводы.

habr.com/ru/articles/914324/

#искусственный_интеллект #вайбкодинг #llmfirst #teqfw #dependency_injection #chatgpt #deepseek #cms

2025-05-09

DI в Python, Easy-DI: спаситель в сложном мире зависимостей

Привет, Хабр! Сегодня я бы хотел вместе с вами погрузится в увлекательный мир зависимостей, а точнее их внедрение. И так, давайте сначала разберемся что же такое зависимость? Зависимость - это объект (или функция, в Python все - это объект), который нужен другому объекту или функции для их нормальной работы. Почти в каждого объекта есть одна или несколько зависимостей. Существует 2 основных метода их получение: создание зависимости непосредственно внутри функции либо же инъекция (внедрение).

habr.com/ru/articles/907544/

#python #dependencies #dependency_injection #di #easydi #dieasy #инъекция_зависимостей

2025-04-17

@teqfw/di: Coding JavaScript like a Java boss

Эта статья для тех, кто, как и я, хочет программировать на JavaScript в Java-стиле. Для тех, кто находит вдохновение в балансе между строгой архитектурной дисциплиной Java и творческой свободой JavaScript. Ранее я уже публиковал " философию " своей платформы TeqFW , а также инструкции для LLM ( раз , два ) по оформлению es-модулей в приложениях, написанных в стиле TeqFW . На этот раз я делюсь инструкцией для LLM по использованию внедрения зависимостей в таких приложениях. Для тех, кто не совсем понимает, что значит " программировать на JavaScript в Java-стиле ", приведу рабочий пример — это Node.js-утилита @flancer64/smtp-logger . Она сохраняет в базу данных все email'ы, которые Postfix отправляет наружу. Мне как раз понадобился такой функционал — и я реализовал его в стиле TeqFW : с явным управлением зависимостями и строгой модульной структурой. Под катом - пример JS-кода в Java-стиле.

habr.com/ru/articles/901678/

#teqfw #javascript #es6 #esmodules #dependency_injection #ioc

2025-03-25

Год с Dishka: какой он — модный DI-контейнер?

Привет, Хабр, меня зовут Юрий, я уже год использую хайповый IoC‑контейнер dishka и хочу немного поделиться опытом эксплуатации. Мой проект — движок для городской ночной поисковой игры «Схватка» («Энкаунтер» или «Дозоры»). Проект полностью open source .

habr.com/ru/articles/894286/

#python #dishka #diконтейнер #iocконтейнер #dependency_injection

2025-03-23

Жизненный цикл бина в Spring

Разобраться в жизненном цикле бина в Spring бывает непросто: информация разбросана, а объяснения часто сложные и перегруженные деталями. Эта статья — простое и понятное руководство, где все этапы разобраны на живых примерах

habr.com/ru/articles/893614/

#spring #springboot #spring_framework #Жизненный_цикл_бина #Dependency_Injection #BeanPostProcessor #ApplicationContext #Bean_Lifecycle #Инъекция_зависимостей #AOP

2025-03-13

Сравнение Dagger 2, Dagger Hilt и Koin

В этой статье мне хотелось бы разобрать вопрос, которым часто задаются начинающие и молодые разработчики мобильных приложений под Android. Многие мобильные разработчики слышали о таких широко известных инструментах внедрения зависимостей (DI), как Koin и Dagger. Они решают одну задачу — управление зависимостями, но делают это по-разному. Но в чём же их принципиальная разница, в чём их отличия, их плюсы и минусы, и какой из этих инструментов выбрать при разработке нового проекта (и в зависимости от его сложности и требований)? Обо всём об этом постараюсь кратко изложить далее и дам рекомендации по выбору для новых проектов.

habr.com/ru/articles/890462/

#dagger_2 #hilt #koin #kotlin #dependency_injection #android_development

2025-03-04

IoC: DI vs Ambient Context

На днях с коллегой @nin-jin возник небольшой спор в комментариях к статье " ООП: худшее, что случалось с программированием ". Мы обсуждали, что является истинным IoC : " контекст окружения " (Ambient Context) или же " внедрение зависимостей " (Dependency Injection). Я понимаю, что разработчики обычно выбирают инструменты, исходя из поставленных задач, и что даже самые приверженные сторонники какого-то подхода могут время от времени попробовать альтернативу. В связи с этим я решил создать опрос, чтобы узнать, какой из этих двух методов более популярен среди читателей Хабра. Я уверен, что это не изменит наших с коллегой взглядов, но может немного изменить градус радикальности высказываний. Другие наши коллеги могут посчитать этот опрос бессмысленным, типа популярные практики не могут быть хорошими априори. Я же считаю, что более популярные практики прошли более тщательную проверку жизнеспособности, чем их менее популярные аналоги. Популярность практики прямо пропорциональна вероятности того, что твою текущую проблему уже кто-то когда-то решил с её помощью. А зачастую решены и те проблемы, о которых ты пока даже и не подозреваешь. Прошу воспринимать этот опрос в легком и неформальном ключе. Мне просто интересно, какой из этих двух методов более распространен среди хабровчан. к опросу

habr.com/ru/articles/887646/

#ioc #ambient_context #dependency_injection #опрос

2025-02-12

Дирижируем зависимостями: Оркестрация Koin scopes в Jetpack Compose Navigation

Привет, Хабр! Меня зовут Артем и я автор и ведущий YouTube и Telegram каналов Android Insights. В этой статье я рассмотрю, как использовать Koin scopes в связке с Jetpack Compose Navigation, чтобы эффективно управлять зависимостями на разных уровнях навигационного графа.

habr.com/ru/articles/881982/

#android #kotlin #koin #di #внедрение_зависимостей #scope #dependency_injection

2025-02-11

Найди x: React + MobX + SSR + x = Счастье

С ростом приложения и увеличением количества зависимостей, мы осознали необходимость в централизованном управлении зависимостями, выходящем за рамки React и MobX. Существующие IoC-контейнеры показались избыточными и тяжеловесными. Поэтому было создано собственное решение . Вы статье вы узнаете, как мы решили уравнение)

habr.com/ru/articles/880720/

#dependency_injection #inversion_of_control #di #ioc #react #mobx #ssr #server_side_rendering #state_management

2024-12-18

Dagger 2: как сделать свой DI за 10 минут

Привет, меня зовут Иван Курак, я Android-разработчик приложения Ozon Job. Если в первой статье мы разбирали фреймворк Koin, то во второй на наш исследовательский стол попадёт Dagger, который мы используем на большинстве проектов Ozon, в том числе на приложении Ozon Курьер Экспресс, за которое отвечает наш отдел. Это мобильное приложение, которое позволяет курьерам-фрилансерам и водителям службы доставки взять подработку в Ozon и доставлять экспресс-заказы от селлера напрямую клиенту или в ПВЗ Ozon. В проекте мы используем Dagger 2 согласно его основной функциональности — собирать общие компоненты и навигацию между модулями, изолировать зависимости, улучшить тестируемость и поддерживаемость. Его важный плюс в том, что он строит дерево зависимостей и может в момент компиляции узнать, какие зависимости достижимы, а какие нет. Стоит сказать, что мы не будет разбирать механизм кодогенерации, а сосредоточимся именно на классах, которые Dagger 2 создаёт для своей работы. Эта статья будет полезна тем, кто использует Dagger 2 в своих приложениях и иногда/часто попадает в ситуации непонимания, почему Dagger 2 ведёт себя не так, как мы ожидаем. А это может создавать определённые трудности, особенно при отладке сложных проблем или при необходимости настройки более сложных сценариев внедрения зависимостей. Например, в приложении Ozon Курьер Экспресс ведутся большие работы по переписыванию приложения на новую архитектуру. Поэтому рядом с существующей DI-архитектурой появилась вторая DI-архитектура. Чтобы их подружить, пришлось покопаться во внутренностях кода, что генерирует Dagger 2. Дополнительная (но не менее важная) цель статьи — показать, что базовый код, который генерирует Dagger, не такой уж и страшный :).

habr.com/ru/companies/ozontech

#kotlin #dagger_2 #android #di #dependency_injection #java

2024-12-16

FastAPI и Dependency Injection: правда или вымысел?

В свое время FastAPI прогремел как гром среди ясного неба - тут тебе и минималистичный API аля- Flask (все устали от Django , диктующего свои правила), и OpenAPI документация из коробки, и удобное тестирование, и хайповая асинхронность. Буквально все, что нужно для свободы творчества, и никаких ограничений! Да еще и Depends завезли! В тот момент это был культрурный шок - Dependency Injection в Python ? Разве это не что-то из Java ? Но дьявол кроется в деталях. А вы уверены, что те самые Depends == Dependency Injection ? Уверены, что пишете код на FastAPI правильно? В рамках статьи мы рассмотрим различные подходы к организации зависимостей в рамках FastAPI проекта, оценим их с точки зрения удобства использования и постараемся разобраться, как же все-таки "правильно" готовить DI в FastAPI . Давайте разбираться

habr.com/ru/articles/867040/

#fastapi #dishka #dependency_injection #dependency_inversion #solid #clean_architecture #python #web

2024-12-04

Самая сложная директива Taiga UI

Часто необходимо знать, с какой областью страницы взаимодействует пользователь. Например, если вы создаете выпадающее меню, нужно понять, когда его закрывать. Наивная реализация будет просто слушать клики и проверять, произошел ли клик вне элемента выпадающего меню. Но мышь — это не единственный способ взаимодействия, не стоит забывать и про клавиатуру. Кроме того, выпадающее меню может иметь вложенную многоуровневую структуру, что делает простую проверку цели клика проблематичной. В этой статье исследуем директиву ActiveZone — подход, который мы использовали в библиотеке компонентов Taiga UI. Она полагается на два моих любимых инструмента Angular: Dependency Injection и RxJS . Нам понадобится глубокое понимание нативных событий DOM. Как бы ни был далек Angular от чистого JavaScript и DOM, он все равно полагается на старые добрые Web API, поэтому важно качать свои знания и в области ванильного frontend.

habr.com/ru/companies/tbank/ar

#html #dropdown #focus #accessibility #directive #dependency_injection

2024-12-04

Моки, L1 и никакого деплоя. Собираем идеальный .NET-тест для веб-сервиса

Автотесты, как известно, работа пыльная и ресурсозатратная. А уж если речь идет об интеграционных, то тем более: сначала осуществляешь сборку теста, затем добавляешь его в нужную среду, а потом еще тот самый деплой , подготовка которого может занимать критически много времени… Но будучи SDET-ом, то есть совмещая в себе навыки разработчика, тестировщика и DevOps , я постигаю архитектуру тестов и иногда нахожу интересные решения по ее оптимизации :) В этой статье расскажу, как тестировать ASP.NET-приложения максимально быстро, не закрывая IDE и вообще не запуская деплой! Покажу, как при таком подходе создавать не только, например, тесты REST API, но и веб-тесты с использованием Selenium или Playwright. Объясню, что такое TestServer и WebApplicationFactory на конкретных примерах, и продемонстрирую, как с ними можно работать! Статья будет максимально полезна тем, кто так или иначе уже погружен в непростой мир .NET и C# (и не утонул в нем). Для вас это готовый туториал по интеграции всех этих инструментов! Впрочем, это у нас в компании широко используются .NET и «шарпы» — но даже если ваши тесты пишутся не на C#, все равно рекомендую пробежаться по моей статье! Уверен, вы сможете почерпнуть для себя пару хороших идей, ведь все описанное ниже можно реализовать и на других языках программирования.

habr.com/ru/companies/kaspersk

#лаборатория_касперского #sdet #тестирование #автотесты #автоестирование #DI #IoC #dependency_injection #Castle_Windsor #itинфраструктура #кибербезопасность #DevOps #qa #тестирование_по #qa_automation #автоматизация_тестирования #testing #тестирование_вебприложений

2024-12-03

Как сделать так, чтобы код Backend стажера не вонял

Как сделать так, чтобы код Backend стажера не вонял В статье разобраны распространенные проблемы в коде начинающих разработчиков с конкретными решениями: грамотная инъекция зависимостей, использование Scoped-сервисов, паттерн Generic Repository и создание Stateless-классов. Материал будет полезен Junior и Middle разработчикам, которые стремятся улучшить архитектуру своих проектов и избежать ошибок структурирования кода в backend NodeJS разработке

habr.com/ru/articles/863342/

#nodejs #aspnetcore #mvc #oop #solid #javascript #typescript #dependency_injection #архитектура #рефакторинг

2024-11-22

Продвинутая регистрация multi-сервисов в Angular

Внедрение нескольких сервисов с помощью одного токена — достаточно удобная механика в фреймворке Angular. Однако, можно столкнуться с неприятностью, что во всех местах, где нужно получить данный сервис, придётся как-то выбирать нужный инстанс из массива. Кто-то делает это напрямую, через метод массива find , кто-то регистрирует сервис-менеджер, который умеет возвращать нужный инстанс, однако оба варианта рождают неприятный бойлерплейт. В этой статье разберём подход по удобной и продвинутой регистрации multi-сервисов.

habr.com/ru/articles/860586/

#angular #javascript #di #dependency_injection #typescript

2024-11-07

Разница между ранним и поздним связыванием

В этой публикации я " на пальцах " попытаюсь объяснить, чем отличается раннее и позднее связывание кода для обычного программиста. Не для компилятора или статического анализатора, а для человека, который пишет JavaScript/TypeScript-код. Ну и немножко попиарюсь в конце.

habr.com/ru/articles/856578/

#late_binding #early_binding #inversion_of_control #dependency_injection #teqfw

2024-10-26

Nexus-IoC — хорошо знакомый незнакомец в мире TypeScript и DI

Вы запутались в сложных графах зависимостей и бесконечных правках кода? Nexus-IoC – это лёгкое, это мощное решение для внедрения зависимостей в проектах на TypeScript. Созданная как альтернатива Inversify, эта библиотека поможет вам легко управлять модулями, находить ошибки до их появления в продакшене и даже визуализировать граф зависимостей вашего приложения! В статье я расскажу, какие проблемы решает Nexus-IoC, как начать с ним работать и как эта библиотека может сделать разработку более управляемой и предсказуемой. А также поделюсь планами на будущее. Впереди много интересного!

habr.com/ru/articles/853722/

#dependency_injection #inversion_of_control #typescript #javascript

2024-10-23

Встречаем yx_scope: DI-фреймворк для работы со скоупами в открытом доступе

Для больших проектов не всегда хватает одного модуля: иногда надо пошарить какие‑нибудь классы или UI‑элементы. Так со временем проект дробится на много мелких модулей, которые так или иначе связаны разного рода зависимостями. И если за этим не следить, то рано или поздно структура проекта может стать запутанной. Наша команда разрабатывает приложение Яндекс Про, которым пользуются водители и курьеры. Из‑за многомодульности разные команды использовали разные подходы к связыванию зависимостей — в основном это getIt , injectable и riverpod . Но у всех решений были свои недостатки. К тому же то, что в одном проекте используется несколько подходов, сильно усложняло взаимодействие команд. Сложности подтолкнули нас к поиску собственного решения, которое удовлетворяло бы всем нашим требованиям. И теперь мы готовы поделиться им с комьюнити: наше решение — это группа библиотек yx_scope . Расскажу, зачем нужны скоупы и как они работают, в чём преимущества нашего фреймворка и как его использовать.

habr.com/ru/companies/yandex/a

#dart #flutter #di #dependency_injection #scopes

2024-09-20

Проблемы InheritedWidget'а в Flutter

Service Locator - зло. InheritedWidget - это сервис локатор с ограничениями. В этой статье разберемся, как решают эти ограничения проблемы сервис локатора, и решают ли...

habr.com/ru/articles/844916/

#dart #flutter #антипаттерн #проектирование #дизайн #inheritedwidget #service_locator #dependency_injection #dependency #solid

Client Info

Server: https://mastodon.social
Version: 2025.04
Repository: https://github.com/cyevgeniy/lmst