Какой класс или модуль отвечает за получение данных из базы данных и отправку их на сервер

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

Ответ

В Android за работу с локальной БД обычно отвечает Room (библиотека поверх SQLite), а за сетевые запросы - Retrofit/OkHttp.

Для объединения этих задач используют Repository - слой, который абстрагирует источник данных. Пример:

class UserRepository(
    private val localDataSource: UserDao,
    private val remoteDataSource: UserService
) {
    suspend fun getUsers(): List<User> {
        val localUsers = localDataSource.getUsers()
        return if (localUsers.isEmpty()) {
            val remoteUsers = remoteDataSource.getUsers()
            localDataSource.insertAll(remoteUsers)
            remoteUsers
        } else {
            localUsers
        }
    }
}

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

  1. Репозиторий управляет кэшированием
  2. Работает с разными источниками данных
  3. Обычно используется вместе с ViewModel и LiveData/Flow