Вступить в клуб →
лёгкаявопросАрхитектура и состояние экрана

Зачем передавать репозиторий в конструктор ViewModel, а не создавать внутри

В коде встречается такой вариант:

class ProfileViewModel : ViewModel() {
    private val repo = ProfileRepository(ApiClient.instance, AppDatabase.instance)
}

На код-ревью просят передавать репозиторий через конструктор.

Какой довод здесь основной?

  • Так в классе меньше строк кода и конструктор выглядит чище, а зависимость при этом остаётся ровно той же самой
  • Конструктор с параметрами создаёт объект быстрее, чем создание зависимости внутри тела класса: на слабых устройствах это заметно при открытии экрана
  • Так объект репозитория создаётся лениво, только когда он реально понадобится, и приложение экономит память устройства
  • ViewModel перестаёт зависеть от конкретной реализации: в тесте подставляется фейковый репозиторий, а сборка графа зависимостей живёт в одном месте

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела