Зачем передавать репозиторий в конструктор ViewModel, а не создавать внутри
В коде встречается такой вариант:
class ProfileViewModel : ViewModel() {
private val repo = ProfileRepository(ApiClient.instance, AppDatabase.instance)
}
На код-ревью просят передавать репозиторий через конструктор.
Какой довод здесь основной?
- Так в классе меньше строк кода и конструктор выглядит чище, а зависимость при этом остаётся ровно той же самой
- Конструктор с параметрами создаёт объект быстрее, чем создание зависимости внутри тела класса: на слабых устройствах это заметно при открытии экрана
- Так объект репозитория создаётся лениво, только когда он реально понадобится, и приложение экономит память устройства
- ViewModel перестаёт зависеть от конкретной реализации: в тесте подставляется фейковый репозиторий, а сборка графа зависимостей живёт в одном месте
