Зачем нужен local data source interface

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

Ответ

Локал дата соурс интерфейс нужен для абстракции работы с локальным хранилищем (Room, SharedPrefs, DataStore). Он позволяет:

  1. Изолировать реализацию (можно менять хранилище без правки кода)
  2. Упрощает тестирование (можно подменить mock-реализацию)
  3. Соблюдает принцип Dependency Inversion (DIP из SOLID)

Пример:

interface UserLocalDataSource {
    suspend fun getUser(id: String): User?
    suspend fun saveUser(user: User)
}

class RoomUserDataSource(
    private val dao: UserDao
) : UserLocalDataSource {
    override suspend fun getUser(id: String) = dao.getById(id)
    override suspend fun saveUser(user: User) = dao.insert(user)
}