Репозиторий реализован с помощью интерфейса или напрямую

«Репозиторий реализован с помощью интерфейса или напрямую» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Android-разработке рекомендуется использовать интерфейс для репозитория. Это позволяет:

  1. Легко подменять реализацию (например, мок для тестов)
  2. Соблюдать принцип инверсии зависимостей (DIP)
  3. Упрощать поддержку кода

Пример:

interface UserRepository {
    suspend fun getUser(id: String): User
}

class UserRepositoryImpl(
    private val api: UserApi,
    private val dao: UserDao
) : UserRepository {
    override suspend fun getUser(id: String): User {
        // Реализация с кешированием
    }
}

Прямая реализация без интерфейса допустима в простых случаях, но усложняет тестирование и модификацию кода.