Как сделать фичу согласно принципам чистой архитектуры где приложение отправляет запрос в сеть и делает какие-то определенные действия

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

Ответ

Разделяй на слои:

  1. Domain - бизнес-логика и use case (Interactor)
class FetchDataUseCase(private val repo: DataRepository) {
    suspend operator fun invoke(): Result<Data> = repo.fetchData()
}
  1. Data - репозиторий (абстракция) + реализация (DataSource)
interface DataRepository {
    suspend fun fetchData(): Result<Data>
}

class RemoteDataSource(private val api: ApiService) : DataRepository {
    override suspend fun fetchData() = try {
        Result.success(api.getData())
    } catch (e: Exception) {
        Result.failure(e)
    }
}
  1. Presentation - ViewModel вызывает use case, обрабатывает состояния (Loading/Success/Error)

Ключевые моменты:

  • Слои зависят только внутрь (Domain → Data, Presentation → Domain)
  • UseCase не знает о деталях реализации (сеть, БД)
  • Репозиторий скрывает источник данных (сеть/кэш)