701просмотров
17.8%от подписчиков
27 января 2026 г.
question📷 ФотоScore: 771
💉 Dependency Injection: Зачем усложнять, если можно просто написать new? Когда новичок видит код с кучей аннотаций @Inject или модулей, у него возникает вопрос: "Зачем всё это? Я же могу просто создать объект внутри класса!" ❌ Код Джуна (Hard dependency): class UserRepository { // Мы "приварили" конкретную базу данных к репозиторию private val database = SQLiteDatabase() fun getUser() { ... }
} В чем проблема?
Представьте, что вы строите дом. Этот код как если бы вы вмуровали кофемашину прямо в стену кухни. 1. Хотите заменить кофемашину на новую? Придется ломать стену (переписывать код класса).
2. Хотите протестировать кухню, не варя кофе? Не получится, машина там намертво. ✅ Код Мидла (Dependency Injection): class UserRepository(private val database: Database) { // Мы просим дать нам ЛЮБУЮ базу данных через конструктор
} В чем суть?
Вы говорите: "Мне для работы нужна база данных. Дайте мне её, я не хочу сам её создавать".
Это как розетка. Вы не вмуровываете технику в стену, вы просто втыкаете вилку. Сегодня это дешевый чайник (тестовая база), завтра мощная кофемашина (реальный сервер). 🛠 Инструменты (Что учить): 🤖 Android: • Hilt (Dagger): Стандарт от Google. Мощный, проверяет ошибки при компиляции, но сложный в настройке. • Koin: Service Locator (технически не совсем DI, но решает те же задачи). Простой, пишется на чистом Kotlin, но ошибки могут вылезти в рантайме. Идеально для старта. 🍏 iOS: • Swinject: Классика DI контейнеров. • Swift Native: В современных проектах часто используют просто Factory Pattern или передачу зависимостей через init, без сторонних библиотек. Это самый чистый путь. 💡 Совет:
На собеседовании на вопрос "Что такое DI?" не начинайте рассказывать про даггер.
Скажите просто: "Это принцип, когда объекты не создают свои зависимости сами, а получают их извне. Это нужно для тестируемости и гибкости кода". Это ответ уровня Senior. А что используете вы в своих проектах? 👇 #architecture #di #hilt #koin #ios #android #middle #patterns 👉 @developer_mobila