В чем связь между UseCase и Repository

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

Ответ

UseCase (Interactor) содержит бизнес-логику, а Repository предоставляет доступ к данным. UseCase использует Repository для получения/сохранения данных, но не знает деталей реализации (сеть, БД и т.д.). Это разделение по принципу Clean Architecture.

Пример:

class GetUserUseCase(private val userRepo: UserRepository) {
    suspend operator fun invoke(userId: String): User {
        return userRepo.getUser(userId) // запрос к репозиторию
    }
}

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