Может ли Context располагаться в UseCase

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

Ответ

Нет, Context не должен находиться в UseCase. UseCase — это слой бизнес-логики, который должен быть независим от Android-специфичных компонентов (включая Context). Это нарушает принципы чистой архитектуры и усложняет тестирование.

Если нужен доступ к ресурсам или системным сервисам, их следует передавать через интерфейсы (например, ResourceProvider или SystemServiceWrapper), реализованные в слое данных или presentation.

Пример:

class GetUserUseCase(
    private val userRepository: UserRepository,
    private val resourceProvider: ResourceProvider // Интерфейс, а не Context
) {
    suspend fun execute(): User {
        return userRepository.getUser()
    }
}