0Pricing
Android Academy · Урок

Зачем нужно внедрение зависимостей

Делайте код пригодным для тестирования и модульным

«Зачем нужно внедрение зависимостей» — бесплатный урок Android Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Android Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Android Academy содержит 4 уроков всего.

Что такое внедрение зависимостей?

Dependency Injection (DI) означает передачу объекту необходимых ему компонентов извне вместо их самостоятельного создания.

Проблема: жёсткие зависимости

Когда класс создаёт собственные зависимости, он оказывается тесно связанным с ними, поэтому его сложно изменять и тестировать.

class UserViewModel {
    private val repo = UserRepository(
        ApiClient(), AppDatabase.get()
    ) // tightly coupled
}

Решение: используйте внедрение

Передавайте зависимости через конструктор. Классу больше не нужно знать, как они создаются.

class UserViewModel(
    private val repo: UserRepository
) {
    // repo supplied from outside
}

Преимущество 1: тестируемость

В тестах можно передать поддельный или имитирующий репозиторий и протестировать ViewModel без настоящей сети или базы данных.

val vm = UserViewModel(FakeUserRepository())

Преимущество 2: модульность

Поскольку классы зависят от абстракций, реализации можно заменять — например, настоящий API на автономную заглушку — не изменяя код, который их использует.

Зависите от интерфейсов

Пусть классы зависят от интерфейса, а не от конкретного типа. Это ключ к простой замене реализации.

interface UserRepository {
    suspend fun getUsers(): List<User>
}

class NetworkUserRepository(
    private val api: ApiService
) : UserRepository { /* ... */ }

Преимущество 3: единственная ответственность

Классы сосредоточены на своей задаче, а не на создании связанных с ними объектов. Создание объектов переносится в отдельное место.

Ручное DI становится неудобным

Можно выполнять DI вручную, но по мере роста графа зависимостей Вам приходится вручную соединять множество объектов и передавать их через конструкторы. Это утомительно и приводит к ошибкам.

val db = AppDatabase.get(context)
val api = ApiService.create()
val repo = NetworkUserRepository(api)
val vm = UserViewModel(repo)
// ...repeated everywhere

Появление фреймворка DI

Фреймворк автоматизирует это соединение. Вы один раз объявляете, как создавать каждую зависимость, а он сам строит весь граф.

Почему Hilt

Hilt — рекомендуемый фреймворк DI для Android. Построенный на основе Dagger, он предоставляет стандартные компоненты с заданной областью действия для классов Android (Application, Activity, ViewModel), требуя гораздо меньше шаблонного кода.

Что предоставляет Hilt

  • Автоматическое создание графа зависимостей.
  • Области действия, учитывающие жизненный цикл.
  • Простое внедрение в Activity, Fragment и ViewModel.

В следующих уроках Вы настроите его.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли внедрение зависимостей.

Итоги

Вы узнали:

  • DI предоставляет зависимости извне, вместо того чтобы создавать их внутри.
  • Он улучшает тестируемость, модульность и разделение ответственности.
  • Зависите от интерфейсов.
  • Ручное DI плохо масштабируется, а Hilt автоматизирует его.

Часто задаваемые вопросы

Урок «Зачем нужно внедрение зависимостей» бесплатный?

Да — полный текст урока «Зачем нужно внедрение зависимостей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Android Academy, подпишись на CoddyKit PRO. Курс Android Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужно внедрение зависимостей»?

Делайте код пригодным для тестирования и модульным Ты практикуешь Android Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Android Academy?

Предыдущий опыт не требуется. Android Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужно внедрение зависимостей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Android Academy?

Да. Каждый урок Android Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужно внедрение зависимостей
  2. Настройка Hilt
  3. Модули и провайдеры
  4. Внедрение зависимостей в ViewModel
← Назад к Android Academy