Ответ
Плюсы:
✅ Единый контракт для работы с данными, упрощает замену источника
✅ Уменьшает дублирование кода в репозитории
✅ Позволяет легко добавлять кеширование или стратегии загрузки
Минусы:
❌ Может привести к избыточным методам в интерфейсе (не все операции нужны для обоих источников)
❌ Усложняет обработку специфичных ошибок (например, только для сети или БД)
❌ Требует аккуратного проектирования, чтобы не нарушать принцип разделения интерфейсов
Пример:
interface DataSource {
suspend fun getUser(id: String): User
}
class RemoteDataSource : DataSource {
override suspend fun getUser(id: String): User {
// API call
}
}
class LocalDataSource : DataSource {
override suspend fun getUser(id: String): User {
// DB query
}
}