Почему Repository находится в Domain-слое

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

Ответ

Repository находится в Domain-слое, потому что он определяет интерфейсы для доступа к данным, абстрагируя Domain от деталей реализации (Data-слой). Это позволяет Domain-слою оставаться независимым от конкретных источников данных (БД, API и т.д.), следуя принципу инверсии зависимостей (DIP).

Пример:

// Domain-слой
interface UserRepository {
    suspend fun getUser(id: String): User
}

// Data-слой
class UserRepositoryImpl(
    private val api: UserApi,
    private val dao: UserDao
) : UserRepository {
    override suspend fun getUser(id: String): User {
        // Реализация получения данных
    }
}