Ответ
Плюсы:
- Уменьшает связанность кода, упрощая замену зависимостей (например, моки для тестов).
- Упрощает тестирование (легко подменять реализации).
- Улучшает читаемость и поддерживаемость (зависимости явно объявляются).
- Облегчает повторное использование кода.
Минусы:
- Увеличивает сложность настройки (особенно без фреймворков типа Dagger/Hilt).
- Может усложнить отладку из-за скрытых зависимостей.
- Требует больше boilerplate-кода (например, фабрики, модули).
Пример с Dagger/Hilt:
@Module
class NetworkModule {
@Provides
fun provideApiService(): ApiService = Retrofit.Builder()...build()
}
@AndroidEntryPoint
class MyViewModel @Inject constructor(private val api: ApiService) { ... }