DI
Dependency Injection
Внедрение зависимости — процесс предоставления внешней зависимости программному компоненту. Если нужно получить объект какого-либо класса, то нужно знать, как его создавать и придоставлять все необходимые ему для это зависимости. За это отвечает специальный компонент, который работает с графом зависимостей. Зависимость - объект, который необходимо получить с помощью компонента, а граф зависимостей — это набор всех таких объектов и связей между ними. Чтобы получить объект, нужно поместить его в граф и описать, каким образом можно получить экземпляр этого класса. DI рекомендуется использовать во всех реальных проектах. Можно описывать создание объектов один раз и использовать их везде в приложении, а также легко контролировать их lifecycle.
• увеличивает декомпозицию кода.
• уменьшает сваязанность разных участков кода.
• дает лучную тестируемость и масштабируемость.
• позволяет разделить процессы получения и создания зависимостей.
@Inject
Базовая аннотация, с помощью которой запрашивается зависимость.
Koin
Легковесная библиотека для внедрения зависимостей написанная на чистом kotlin.
• узнаем об ошибке в runtime а не в compile time.
• не генерирует никакого кода нет обработки аннотаций и рефлексии более быстрый в compile time более медленный в runtime.
• все на delegates и dsl.
• для compile time есть koin annotations
Service locator
С локатором служб класс все еще отвечает за создание своих зависимостей (с помощью локатора). С DI классу предоставляются его зависимости. Он не знает и не заботится откуда они берутся.
Android DI. Вопросы на собесе
- Для чего нужен DI?
- Разница между DI и Service locator?
- Разница между Koin и Dagger?