Ответ
Локал дата соурс интерфейс нужен для абстракции работы с локальным хранилищем (Room, SharedPrefs, DataStore). Он позволяет:
- Изолировать реализацию (можно менять хранилище без правки кода)
- Упрощает тестирование (можно подменить mock-реализацию)
- Соблюдает принцип 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)
}