home.social

#dependency_injection — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #dependency_injection, aggregated by home.social.

fetched live
  1. DI во фронтенде: от Context API к Composition Root

    Современные веб-приложения содержат сложную бизнес-логику, которая ранее традиционно располагалась на бэкенде. С ростом сложности возникает необходимость в эффективном управлении зависимостями для поддержания тестируемости, модульности и слабого зацепления этих модулей в приложении. Принцип Инверсии зависимостей (Dependency Inversion, DIP) и его реализация в лице механизма Внедрения зависимостей (Dependency Injection, DI) становится ключевым инструментом для решения этих задач.

    habr.com/ru/articles/1072780/

    #dependency_injection #внедрение_зависимостей #inversifyjs #composition_root #iocконтейнер #архитектура_фронтенда #typescript #ddd #nx #tactical_ddd

  2. # DI без рефлексии и бойлерплейта: магия KSP в действии

    Погряз в боли настройки DI в многомодульных проектах и решил написать собственный велосипед на Kotlin Symbol Processing. Рассказываю, как поэкспериментировал с генерацией кода, победил R8/ProGuard, добавил compile-time валидацию графа и что из этого вообще получилось

    habr.com/ru/articles/1070880/

    #android #kotlin #ksp #dependency_injection #архитектура_приложений #многомодульность_в_android #разработка_мобильных_приложений

  3. «Почему мы снова говорим про архитектуру?»

    Разработчик интерфейсов уверен, что выбранный им фреймворк автоматически решает за него вопросы структуры и организации кода. Он искренне верит, что если взять React, Angular, Vue, да тысячи их, то получает в руки серебряную пулю, которая закроет все проблемы разработки. Достаточно следовать документации фреймворка, и с проектом все будет хорошо в долгосрочной перспективе. И я сам долгое время рассуждал точно так же, я воспринимал только Angular, потому что там есть хоть какой-то структурный подход. На практике это оказывается большим заблуждением. Что делать и кто виноват?

    habr.com/ru/articles/1067886/

    #Архитектура_фронтенда #DomainDriven_Design #Чистая_архитектура #Бизнеслогика #Dependency_Injection #Гексагональная_архитектура #Монорепозиторий #Nx

  4. «Зачем Javasript-у DI контейнер?»

    Вот именно такой вопрос был задан в первом же комментарии к статье " DI-контейнер на чистом JavaScript без TypeScript и reflect-metadata " уважаемого @alexander_kubarski . Я когда-то и сам на Хабре отвечал на этот вопрос (" Зачем нужно внедрение зависимостей в JS "), и уважаемый @Wroud тоже (" Dependency Injection в JavaScript: зачем он вам нужен "), но непонимание места и значения DI у JS-разработчиков всё равно присутствует. Попробую ответить на этот вопрос ещё раз: Внедрение зависимостей помогает снизить стоимость верификации сложного приложения. Оно отделяет компонент от выбора конкретного окружения и позволяет проверять его относительно явных ожиданий, не поднимая каждый раз весь граф реальных зависимостей. Именно для этого используют Inversion of Control в целом и Dependency Injection в частности - во всех языках программирования, а не только в JavaScript. Чуть подробнее...

    habr.com/ru/articles/1061632/

    #javascript #dependency_injection #ioc #инверсия_управления #внедрение_зависимостей #архитектура_приложений #модульность #тестирование #верификация_кода #ииагенты

  5. DI-контейнер на чистом JavaScript без TypeScript и reflect-metadata

    В статье разберем, как собрать простой DI-контейнер на чистом JavaScript без TypeScript, декораторов и reflect-metadata . Заодно посмотрим, как применить его в небольшом DDD-примере с корзиной, репозиторием, скидками и разными lifetime зависимостей. Читать

    habr.com/ru/articles/1060340/

    #reflectmetadata #javascript #di #dependency_injection #dependency_inversion #ddd

  6. Луковичная архитектура: канон и где от него осознанно отступать

    Луковичную (onion) архитектуру обычно продают аргументом «легко поменять БД или фреймворк». Только базу в проде меняют раз в пятилетку, а чаще вообще не меняют — ради этого городить слои не выгодно. Реальная ценность в другом, и она ежедневная: глядя на правку, ты заранее видишь её радиус. Поменял формат ответа одной ручки — изменение осталось в одном handler'е, соседние ручки и cron не задеты. Тронул бизнес-правило в сервисе — и сразу понятно, что эффект расходится на всё, что выше. Понадобилось параллельно писать ещё в одно хранилище — горячий кэш, поисковый индекс, аналитическую базу рядом с основной — это добавляется в одном репозитории, и весь код, который через него пишет, начинает писать в оба места разом. Ничего не переписываешь и, главное, негде забыть: точка подключения одна, а не разбросана по всем местам, где идёт запись.

    habr.com/ru/articles/1051970/

    #чистая_архитектура #onion_architecture #луковичная_архитектура #гексагональная_архитектура #DDD #инверсия_зависимостей #dependency_injection #рефакторинг #проектирование #кодовые_агенты

  7. Ручной DI в Kotlin Multiplatform: понравится и тебе, и твоему ИИ‑агенту

    Граф зависимостей KMP‑приложения можно собрать обычным Kotlin‑кодом — без рефлексии, кодогенерации, аннотаций и DSL. Composition root и конструкторы, никакой магии. Звучит как шаг назад от зрелых DI‑фреймворков — пока не посмотришь, кому такая форма удобна: тебе, новому человеку в команде и твоему ИИ‑агенту.

    habr.com/ru/articles/1051804/

    #kotlin_multiplatform #kmp #dependency_injection #composition_root #android #di

  8. Как я ускорил dependency injection в Python в 130 раз: от рефлексии до компиляции графа

    «Контейнер для DI — это лишний оверхед, передай зависимость руками и не выдумывай». Я тоже так считал, пока не замерил: наивный контейнер резолвил типичный сервис-граф примерно в 200 раз медленнее ручной сборки. Рассказываю, как тремя шагами — кэш плана, удаление проверки, которая всё равно не срабатывает, и компиляция графа в одну плоскую функцию — довёл резолв с 52.9 до 0.40 мкс/оп, почти как руками. И как при этом не дал exec-кодогенерации тихо собирать не те объекты в проде. Приёмы переносимые: профилирование микрооверхеда, выкидывание мёртвой защиты, фаззинг на эквивалентность. Читать разбор

    habr.com/ru/articles/1048184/

    #python #оптимизация_производительности #профилирование #dependency_injection #метапрограммирование #кодогенерация #бенчмарк #cpython

  9. DI в TypeScript без декораторов: почему это будущее

    Каждый, кто пишет на TypeScript хотя бы пару лет, отлично знаком со стандартным DI-сценарием: класс, декоратор @Injectable() , флаг emitDecoratorMetadata в конфиге и рантайм-магия фреймворка. Этот подход казался прорывным в 2015 году, но современный TypeScript ушел далеко вперед. У нас появились мощнейший статический анализ и продвинутый вывод типов, в то время как популярные DI-контейнеры вроде NestJS, InversifyJS или TSyringe будто законсервировались в прошлом. Слепая приверженность старым паттернам начинает откровенно тормозить индустрию. Из-за legacy-декораторов мы оказываемся заперты в рамках медленного tsc без возможности безболезненно уйти на сверхбыстрые сборщики вроде esbuild или SWC. Наша бизнес-логика намертво заражается инфраструктурными импортами сторонних библиотек, а ошибки в графе зависимостей и скрытые утечки памяти обнаруживаются не на этапе компиляции, а уже в рантайме под нагрузкой на проде. Но что, если заставить компилятор TypeScript проверять валидность всего графа зависимостей еще до запуска кода? Без декораторов, reflect-metadata , кастомных трансформеров и тяжелой кодогенерации. В этой статье мы разберем концепцию «экстремальной типизации» на примере InferDI — первого DI-контейнера, где сам граф зависимостей вместе с lifetime-правилами перенесен напрямую в систему типов. Мы поговорим о фундаментальных вещах: почему полный отказ от «удобной» магии аннотаций в пользу 100% ванильного TypeScript — это лучшая инвестиция в архитектуру, безопасность, скорость сборки и долговечность вашего проекта на годы вперед.

    habr.com/ru/articles/1042290/

    #typescript #dependency_injection #dicontainer #reflectmetadata #внедрение_зависимостей #inversifyjs #tsyringe #awilix #Typed_Inject #inferdi

  10. Почему проекты превращаются в спагетти даже у хороших программистов

    Когда программист впервые слышит слово «архитектура», он обычно представляет что-то скучное: диаграммы, стрелочки, коробочки, совещания на три часа и человека, который запрещает писать код. А потом проходит несколько лет. И внезапно оказывается, что проект, который «быстро накидали», начинает разваливаться от любого изменения. Добавили одну кнопку — сломался импорт. Поменяли отчёт — умерла авторизация. Обновили библиотеку — перестала открываться половина форм. И начинается археология. Почему так происходит? Потому что почти любой проект без нормальной архитектуры рано или поздно превращается в спагетти. Причём даже если его пишут хорошие программисты.

    habr.com/ru/articles/1035696/

    #архитектура_по #модульный_монолит #микросервисы #clean_architecture #legacy #спагеттикод #инженерия #backend #software_architecture #dependency_injection

  11. Типобезопасный HTTP API на TypeScript без кодогенерации: @cleverbrush/server и @cleverbrush/client

    Статья о том, как единый типизированный контракт позволяет получить проверяемые на этапе компиляции сервер, клиент и React-хуки — без кодогенерации и без дублирования типов. Дисклеймер: все описываемые библиотеки носят экспериментальный характер — они созданы в рамках эксперимента. Несмотря на это, покрытие тестами у них достаточно хорошее.

    habr.com/ru/articles/1030342/

    #TypeScript #HTTP_API #type_safety #dependency_injection #OpenAPI #TanStack_Query #WebSocket #кодогенерация #schema_validation #монорепозиторий

  12. Вынесение бизнес‑логики из BLoC в use‑cases: прагматичный взгляд на архитектуру Flutter

    Начиная писать Flutter-приложение, для стейт-менеджмента часто хватает простого setState или простого решения, по типу BLoC/Cubit без излишеств. Но с течением жизни проекта ваши блоки могут начать превращаться в god objects. Внутри хендлеров могут находиться и запросы в сервисы, и валидация, и эмиттеры состояния, а для крупной страницы точно одним ивентом не обойдешься. В таких условиях разработка сильно затрудняется, становится сложно поддерживать и масштабировать проект, снижается тестируемость. Это не субъективный опыт — строгая разделенная архитектура повышает гибкость, переиспользуемость и тестируемость кода. BLoC сам по себе — паттерн с отличной дисциплиной потока данных и строгим отделением бизнес‑логики от UI, но стоит немного расслабиться, и он разрастается до god объекта. Цель этой статьи — продемонстрировать, как вынесение бизнес логики в use-cases может помочь вернуть контроль над ViewModel слоем. Это не попытка навязать единственный вариант реализации, а материал про технический компромисс, подтвержденный цифрами и опытом.

    habr.com/ru/articles/1022838/

    #flutter #dart #bloc #чистая_архитектура #use_cases #state_management #архитектура #мобильная_разработка #тестирование #dependency_injection

  13. 10 причин попробовать Effect TS/Основы Effect TS

    Effect -фреймворк, который никого не может оставить равнодушным. Читая комментарии к другим постам, я заметил, что добрая часть хабра считает, что эффект это избыточно сложная и не особо нужная технология. В своей статье я обозначаю 10 причин, почему эту технологию стоит попробовать, даже если вы дико предвзятый разработчик, а также даю экскурс по базам фреймворка.

    habr.com/ru/articles/1009458/

    #Effect #Effect_TS #TypeScript #functional_programming #функциональное_программирование #dependency_injection #AI

  14. Все паттерны в автоматизации тестирования

    Когда я только начинал свой путь в автоматизации, мне отчаянно не хватало толкового и структурированного материала по паттернам проектирования именно для автотестов. Хороших статей про паттерны в целом — вагон, а вот с привязкой к тестированию — днём с огнём не сыщешь. Паттерны — это та вещь, которая моментально выдает уровень культуры кода и понимание инженерных практик. Неудивительно, что на собеседованиях на позицию Automation QA любят покопаться в этой теме. В этой статье я решил закрыть этот пробел. Вы найдете не только продуманную классификацию основных паттернов автоматизации, но и самый подробный, на мой взгляд, разбор каждого из них с примерами. А в конце поговорим про антипаттерны. Добро пожаловать в обсуждение! Буду рад конструктивной критике и дополнениям.

    habr.com/ru/articles/1004628/

    #автоматизация_тестирования #паттерны_проектирования #page_object #builder_pattern #factory_pattern #dependency_injection #contract_testing #snapshot_testing #visual_testing #антипаттерны

  15. Алгоритм резолва зависимостей в Angular Ivy: Математика Блум-фильтров и битовые маски

    Как Angular Ivy находит зависимости за O(1)? Глубокое погружение в алгоритм резолва: от генерации уникальных ID токенов до битовой магии Блум-фильтров. Разбираем, почему строковые токены замедляют ваше приложение и как работает наследование кумулятивных масок в LView. Разложить на биты

    habr.com/ru/articles/988606/

    #Angular #Ivy #Dependency_Injection #Bloom_Filter #Web_Internals #Блумфильтр #Оптимизация_производительности #Frontend_Architecture #Битовые_маски #reverse_engineering

  16. [Перевод] Гексагональная архитектура в Rust: отвязываем бизнес-логику от Solana

    Представьте: вы строите сервис выдачи дипломов на Solana. Всё отлично, пока дело не доходит до тестов. Внезапно оказывается, что для проверки бизнес-логики нужно поднимать валидатор, искать тестовые токены и молиться на стабильность сети. Знакомая боль? В этой статье я покажу, как мы решили проблему, используя async-trait и dyn Trait. Мы превратили интеграционные тесты длиной в минуты в юнит-тесты, которые проходят за миллисекунды. Узнать решение

    habr.com/ru/articles/983874/

    #rust #solana #гексагональная_архитектура #блокчейн #unittesting #dependency_injection #axum #web3 #mocking #refactoring

  17. Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

    Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма "Жил был пёс" сказать - "Шо, опять?" . Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку. Но недавняя публикация в одном довольно крупном Telegram-канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit-тестов. И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new ? И почему все современные рекомендации так настаивают на конструкторах? Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно-ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.

    habr.com/ru/articles/983344/

    #field #injection #constructor #setter #Dependency_Injection #Spring_Framework #Java #ObjectOriented_Design #Invariants

  18. Field vs Constructor Injection в Java: ошибка объектного дизайна или вопрос синтаксиса?

    Знаю, знаю... Прочитав заголовок, хочется голосом волка из мультфильма "Жил был пёс" сказать - "Шо, опять?" . Ведь битва этих подходов давно закончилась и разработчики Spring уже поставили точку. Но недавняя публикация в одном довольно крупном Telegram-канале заставила меня вернуться к этому вопросу. В качестве главных аргументов против field injection там приводились лишь сложность изоляции в тестах и неудобство создания экземпляров для unit-тестов. И хотя с этими пунктами не поспоришь, у многих разработчиков и не только начинающих, остаются вопросы: каковы реальные последствия для самого объекта? Можно ли считать его полноценным сразу после создания new ? И почему все современные рекомендации так настаивают на конструкторах? Поиск ответов показал мне, что аргумент о тестах лишь верхушка айсберга. В глубине, куда я Вас сегодня приглашаю заглянуть, скрываются куда более фундаментальные вопросы принципов объектно-ориентированного дизайна, гарантий Java Memory Model и уважения к жизненному циклу объекта.

    habr.com/ru/articles/983340/

    #field #injection #constructor #setter #Dependency_Injection #Spring_Framework #Java #ObjectOriented_Design #Invariants

  19. Почему я перешел на Dagger Components (вместо Dagger Android)

    Всем привет, меня зовут Анатолий Спитченко, я Android-разработчик в ПСБ. В этой статье расскажу про свои эксперименты с Dagger. Наткнувшись в проекте на огромный модуль Application (11,5 Мб), я стал искать альтернативы обертке Dagger Android. Поэкспериментировал с продвигаемым Google Dagger Hilt, а также с более старым подходом — Dagger Components. Последний, как ни странно, позволяет немного сократить Application и в целом имеет больше плюсов, чем минусов. Подробности под катом.

    habr.com/ru/companies/psb/arti

    #android #java #dagger #разработка_приложений #разработка_под_android #разработка_мобильных_приложений #kotlin #gradle #dagger2 #dependency_injection

  20. Эволюция плеера RUTUBE: от монолита к гибким модулям

    Принимая архитектурные решения, часто так или иначе приходится идти на компромисс: между качеством и скоростью разработки, сложностью реализации и удобством поддержки, быстротой решения бизнес-задачи и гибкостью. Со временем небольшие уступки накапливаются и проект покрывается легаси. Даже если исправно разгребать техдолг, то в любом случае на достаточно длинной дистанции решения и технологии устареют, и станет невозможно обойтись «генеральной уборкой» — потребуется смена архитектуры. В статье расскажу, как мы столкнулись с неизбежной необходимостью переделки веб-плеера RUTUBE — сервиса, который существует с 2006 года, пережил несколько смен команд и парадигм разработки и при этом достаточно большой и высоконагруженный, чтобы нельзя было «просто так взять и всё переписать».

    habr.com/ru/companies/habr_rut

    #rutube #mobx #ооп #видео #hls #ui #dependency_injection

  21. Опенсорс-библиотека Implicits от Яндекс Браузера: новый шаг в передаче зависимостей Swift

    Когда iOS‑приложение вырастает до сотен тысяч строк, появляется проблема: добавление зависимости в глубокий компонент требует изменений во всех промежуточных функциях. Эти функции зависимость не используют — они просто передают её дальше. Сигнатуры разбухают, рефакторинг превращается в массовую правку файлов, и значительная часть кода становится техническим шумом. Проблема известна. Scala использует implicit parameters на уровне языка, Kotlin экспериментирует с context receivers, Android полагается на Dagger. А Swift не предлагает встроенного решения. Поэтому мы в команде Яндекс Браузера создали библиотеку Implicits — механизм неявной передачи зависимостей с compile‑time‑проверками. Она успешно работает в продакшне Браузера на полутора миллионах строк Swift‑кода, а ещё доступна в опенсорсе. В этой статье я расскажу о поиске собственного подхода для передачи зависимостей в коде на Swift, о том, как внедрение Implicits позволяет существенно сократить boilerplate, ускорить рефакторинг и улучшить читаемость кода благодаря локальному объявлению только реально используемых зависимостей, а также покажу реальные примеры из продакшн‑кода мобильной версии Яндекс Браузера.

    habr.com/ru/companies/yandex/a

    #ios #dependency_inversion #dependency_injection #опенсорс_яндекса #swift #b #библиотека

  22. Чистим main.go: предсказуемый старт и надежный Graceful Shutdown

    Сталкивались ли вы с болью при управлении порядком запуска и остановки зависимостей в вашем Go-сервисе? Разработка больших сервисов неизбежно приводит к необходимости управлять множеством зависимостей. В этом контексте мы говорим о долгоживущих компонентах , чья работа обеспечивается отдельными горутинами: как правило, это блокирующий метод (например, Start ), внутри которого крутится цикл обработки. Примерный сценарий жизненного цикла сервиса выглядит так: При запуске критически важно, чтобы пул соединений с БД, кэш и очереди были полностью готовы до того, как HTTP-сервер откроет порт и начнет принимать входящий трафик. С graceful shutdown ситуация обратная: порядок должен быть строго зеркальным. Сначала нужно перестать принимать новые запросы, дождаться завершения текущих, остановить воркеры, и только потом разрывать соединения с инфраструктурой. Иначе мы получаем неприятные ошибки подключения и даже потерянные транзакции в момент деплоя. Если эти проблемы вам не знакомы, смело закрывайте вкладку. Скорее всего, эта статья не принесет вам пользы. Но если вы ищете способ автоматизировать эту рутину, сохранив код чистым - добро пожаловать под кат.

    habr.com/ru/articles/976800/

    #go #golang #graceful_shutdown #dag #Dependency_Injection #Uber_Fx #Микросервисы #Open_Source #Архитектура #lifecycle

  23. Компилер-пассы и тегированные локаторы: делаем плагинную архитектуру на DI

    Привет, Хабр! Иногда в Symfony встают задачи сделать систему плагинов, чтобы можно было подключать новые модули функциональности, не переписывая основную логику. В этой статье я расскажу, как можно создать плагинную архитектуру с помощью контейнера зависимостей Symfony. Читать про реализацию на Symfony

    habr.com/ru/companies/otus/art

    #symfony #dependency_injection #di_контейнер #компилерпасс #tagged_services #тегированные_сервисы

  24. Компактный runtime-DI для Java: JSR-330, Class-File API и миграция за 2 дня

    Когда начинал разработку системы многомерного анализа данных временных рядов Dimension-UI , для внедрения зависимостей в исходном коде решил использовать Dagger 2. Практический опыт показал, что для приложений с большим количеством динамически создаваемых объектов инверсия зависимостей, реализованная в Dagger 2, не подходит. Да, создание графа зависимостей в compile-time — это, во-первых, очень быстро, и, во-вторых, удобно: получаешь сообщения об ошибках конфигурации уже при компиляции. Но накладные расходы на сопровождение всего этого хозяйства – прямо скажем, это боль. Чтобы реализовать scope-зависимости, приходится писать и поддерживать много инфраструктурного кода внутри объектов, куда мы внедряем зависимости. В Dagger 2 такая реализация, во-первых, «загрязняет» код, а во-вторых, серьезно осложняет тестирование. Изолировать методы удобным способом не получается: в тестах нужно писать очень много кода, чтобы прокинуть необходимый контекст и корректно мокировать внешние зависимости. Я туда просто не полез — покрывал unit- и UI-тестами только базовую функциональность, где были Singleton-зависимости. Даже с одними Singleton’ами приходится поднимать отдельную тестовую инфраструктуру для запуска приложения в тестовом режиме. Это не просто неудобно — это очень затратно по времени. Если сравнить усилия, которые надо потратить на реализацию тестирования подобного функционала в Spring и Dagger… Сравнение будет не в пользу Dagger. В целом я начал думать о переходе на runtime-генерацию графа зависимостей.

    habr.com/ru/articles/962326/

    #java #dagger2 #dependency_injection #dependency_inversion #DimensionDI #DimensionUI #spring_ioc #guice #рефакторинг

  25. Пишем переиспользуемые инпуты для реактивных форм с ControlValueAccessor + NgControl/Injector

    ControlValueAccessor - это то, что отделяет профессиональную дизайн-систему от набора костылей. Но как грамотно связать его с состоянием контрола (invalid, touched), не создав циклических зависимостей? Эта статья - не просто «ещё один туториал». Это пошаговое руководство по созданию универсального инпута на современном стеке: Signals , OnPush и безопасный инжект NgControl . Разбираем раз и навсегда. Освоить CVA раз и навсегда

    habr.com/ru/articles/946890/

    #angular #controlvalueaccessor #CVA #реактивные_формы #reactive_forms #NgControl #Кастомный_компонент #typescript #signals #dependency_injection

  26. Как мы Best Practices в Java анализатор внедряли

    История о том, как мы переписывали приложение под DI контейнеры, разбирали зависимости, рисовали графики, чтобы в этом не потеряться, и молились, чтобы ничего вдруг не сломалось.

    habr.com/ru/companies/pvs-stud

    #java #dependency_injection #guice #software_architecture #clean_code #static_analysis #inversion_of_control

  27. Обзор DI-фреймворков для Unity

    Недавно открыл для себя новый DI-фреймворк — RefleX, который, как оказалось, уже давно набирает популярность. Он является аналогом известных многим Zenject/Extenject и VContainer и открыто себя им противопоставляет. Стоит ли этот фреймворк внимания, что лучше выбрать, какие есть альтернативы — об этом расскажу далее, опираясь на свой опыт.

    habr.com/ru/articles/943354/

    #unity #gamedev #development #architecture #di #dependency_injection #framework

  28. Внедрение зависимостей (Dependency Injection DI), SOLID, ошибки выделения абстракций и чуть-чуть психологии

    Мне тут попалась идеальная статья про DI в который нашелся очень интересный пример для разбора. Есть фундаментальные основы, которые почему то никто не хочет сформулировать, а начинающим разработчикам, которые впервые сталкиваются с концепцией DI, в первую очередь надо бы рассказать эти фундаментальные основы, но почему то нет желающих это сделать и у меня даже есть предположения, почему это не получается, я попробую их как-то выразить в том числе. Я знаю что искать ошибки в статьях начинающих на Хабре это плохой тон, и я вряд ли выйду в плюс с такой статьей, но как говорится: Платон мне друг, но истина дороже. В предыдущей статье мы выяснили как создать два класса (Хост и Енкодер, класс А и класс В) один из которых (А) не может работать без использования функций другого класса (В, а может, и без данных из этого класса В не может работать), но при этом совершенно не зависит от этого класса В! То есть класс А может запросто работать с любым другим классом (C, D, … ) вместо класса В, при некотором условии изложенном в предыдущей статье. По моему, та статья может быть хорошей разминкой для понимания концепции Внедрения Зависимостей. И, определенно, эта статья может считаться продолжением темы практической архитектуры ПО.

    habr.com/ru/articles/938512/

    #dependency_injection #dependencies #di #ооп #архитектура #архитектура_приложений #космотекст

  29. [Перевод] Dependency Injection в JavaScript: зачем он вам нужен

    Как избавиться от проп-дриллинга, упростить тестирование и навести порядок в зависимостях React/JS‑приложения? В статье — зачем вообще нужен dependency injection в JavaScript, почему он редко используется и как это меняет @wroud/di . С кодом, примерами и без тяжёлой рефлексии.

    habr.com/ru/articles/934876/

    #di #dependency_injection #react #typescript #javascript