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. Вопросы на собесе
  1. Для чего нужен DI?
  1. Разница между DI и Service locator?
  1. Разница между Koin и Dagger?