Как устроен Data слой в Clean Architecture

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

Ответ

Data слой в Clean Architecture отвечает за работу с данными: получение, хранение и преобразование. Он состоит из:

  1. Repositories – абстракции над источниками данных (API, БД, кеш). Реализуют интерфейсы из Domain слоя.
  2. Data Sources – конкретные реализации работы с данными:
    • Remote (Retrofit, GraphQL)
    • Local (Room, SharedPrefs)
  3. Mappers – преобразуют модели данных между слоями (DTO ↔ Domain)

Пример репозитория:

class UserRepositoryImpl(
    private val remote: UserRemoteDataSource,
    private val local: UserLocalDataSource
) : UserRepository {

    override suspend fun getUser(id: String): User {
        val localUser = local.getUser(id)
        return localUser ?: remote.getUser(id).also { local.saveUser(it) }
    }
}

Ключевые принципы:

  • Data слой зависит только от Domain
  • Все зависимости инвертированы через DI
  • Источники данных изолированы друг от друга