Где будет находиться интерфейс репозитория

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

Ответ

Интерфейс репозитория обычно располагается в domain/data слое приложения (по принципам Clean Architecture). Он определяет контракт для работы с данными, абстрагируя источник данных (локальная БД, сеть и т.д.).

Пример:

// domain/repository/UserRepository.kt
interface UserRepository {
    suspend fun getUser(id: String): User
    suspend fun saveUser(user: User)
}

Реализация интерфейса будет в data слое:

// data/repository/UserRepositoryImpl.kt
class UserRepositoryImpl(
    private val localDataSource: UserLocalDataSource,
    private val remoteDataSource: UserRemoteDataSource
) : UserRepository {
    // реализация методов
}

Такой подход позволяет легко менять источники данных и соблюдать Dependency Inversion Principle.