Size: a a a

Android Architecture

2020 June 26

Q

QMan in Android Architecture
SE
Привет всем
Нужен совет. У меня архитектура MVVM. У меня есть страница, где я должен показать данные с cети. Кроме этого я кэширую данные результата сервера. Валидность кэша 1 час. Всё работа касательно запросов в сеть и кэширование результатов ответа сервера происходит в Repository. Мне нужно сделать так, чтобы если запрос в сеть вернёт ошибку сервера, то в течение 1 часа показывать данные из кэша.
Пока у меня есть два решение проблемы, они похожие между собой, разница только в том, что в одном месте проверку я делаю в Repository, а другом месте во ViewModel.
Первый вариант, если произойдёт ошибка сервера, то в Repository в onErrorResumeNext узнать тип ошибки, если тип ошибки будет серверная ошибка, то зафиксировать время когда произошла ошибка и исходя из этого последующий час при запросе данных отправлять данные из кэша.
Второй вариант, если произойдёт ошибка сервера, то во ViewModel при обработки ответа с Repository в onError узнать тип ошибки, если тип ошибки будет серверная ошибка, то зафиксировать время когда произошла ошибка и исходя из этого последующий час при запросе данных отправлять данные из кэша.
Какой вариант лучше, делать проверки в Repository или во ViewModel? Или есть  ли какие-то лучше решение данной задачи?

Это как я получаю данные с Repository
https://gist.github.com/githubgist123/7e027675bb4db07fef606e23f39f8a96
1. Исключение ловить в репозитории
2. Сделать обертку, которая будет возвращать и и сключение и данные из кеша. Почему только при исключении данные из кеша - непонятно. Я всегда пропускаю данные через кеш и возвращаю кеш.
источник

Q

QMan in Android Architecture
А если кешируете не все данные, то что в этом случае ?
источник

ФХ

Филадельфия Хачатуря... in Android Architecture
Pavel Aleksandrov
Или даже в репозиторий, так как тут именно работы с данными. Ну тут уже как тебе больше нравится
А чем отличается интерактор от репозитория? Я думал это одно и тоже
источник

PA

Pavel Aleksandrov in Android Architecture
Филадельфия Хачатурян
А чем отличается интерактор от репозитория? Я думал это одно и тоже
Репозиторий - это сущность, которая работает с различными источниками данных: сеть, БД, локальные и внешние хранилища
источник

PA

Pavel Aleksandrov in Android Architecture
Филадельфия Хачатурян
А чем отличается интерактор от репозитория? Я думал это одно и тоже
Интерактор (use case) - это сущность, в которой хранятся методы для реализации твоей бизнес-логики в приложении
источник

PA

Pavel Aleksandrov in Android Architecture
Желательно разъединять работу с данными и с бизнес-логикой для простоты тестирования и дальнейшего расширения
источник

PA

Pavel Aleksandrov in Android Architecture
Pavel Aleksandrov
Репозиторий - это сущность, которая работает с различными источниками данных: сеть, БД, локальные и внешние хранилища
ну и также репозиторий это одноименный паттерн
источник

ФХ

Филадельфия Хачатуря... in Android Architecture
Понял. В примерах на гитхабе используют либо интерактор либо репозиторий. Не встречал чтобы все вместе было 🙄
источник

AO

Artem Osipov in Android Architecture
Филадельфия Хачатурян
Понял. В примерах на гитхабе используют либо интерактор либо репозиторий. Не встречал чтобы все вместе было 🙄
whaaat
источник

КР

Кирилл Романенко... in Android Architecture
Филадельфия Хачатурян
Понял. В примерах на гитхабе используют либо интерактор либо репозиторий. Не встречал чтобы все вместе было 🙄
Лол чё
источник

PA

Pavel Aleksandrov in Android Architecture
Филадельфия Хачатурян
Понял. В примерах на гитхабе используют либо интерактор либо репозиторий. Не встречал чтобы все вместе было 🙄
Это разделение - это концепция Чистой Архитектуры от Роберта Мартина (дядюшка Боб). Гугл действительно во всех своих рекомендациях не использует интеракторы, но это лишь потому что примеры очень маленькие и здесь нет смысла в разделении дополнительном
источник

Sergey λ in Android Architecture
Pavel Aleksandrov
Это разделение - это концепция Чистой Архитектуры от Роберта Мартина (дядюшка Боб). Гугл действительно во всех своих рекомендациях не использует интеракторы, но это лишь потому что примеры очень маленькие и здесь нет смысла в разделении дополнительном
в некоторых примерах есть
источник

Sergey λ in Android Architecture
у них был репозиторий Android Architecture Blueprints
источник

PA

Pavel Aleksandrov in Android Architecture
Sergey λ
в некоторых примерах есть
Возможно и так. Я не видел весь их доступный код для обучения)
источник

Sergey λ in Android Architecture
источник

PA

Pavel Aleksandrov in Android Architecture
Филадельфия Хачатурян
Понял. В примерах на гитхабе используют либо интерактор либо репозиторий. Не встречал чтобы все вместе было 🙄
Можешь здесь посмотреть описание этой концепции в рамках Андроида: https://proandroiddev.com/how-to-implement-a-clean-architecture-on-android-2e5e8c8e81fe
источник

PA

Pavel Aleksandrov in Android Architecture
ну здесь же нет интерактора)
источник

ФХ

Филадельфия Хачатуря... in Android Architecture
👌🏻
источник

Sergey λ in Android Architecture
Pavel Aleksandrov
ну здесь же нет интерактора)
я почему-то подумал про репозиторий
источник

В

Вася in Android Architecture
Всем привет. Подскажите пожалуйста, где и как лучше мапить обьект в моем случае
@SerializedName("token_type")
   var tokenType: String? = null,
   @SerializedName("access_token")
   var accessToken: String? = null,
   @SerializedName("refresh_token")
   var refreshToken: String? = null,
   @SerializedName("user_id")
   var userId: String? = null,
   @SerializedName("expires_in")
   var expiresIn: Long = 0,
   @SerializedName("portal_url")
   var portalUrl: String? = null,
   @SerializedName("error")
   val error: String?,
   @SerializedName("error_description")
   val errorDscr: String?
Всегда приходит 200 ок , но в нем может быть модель  с полем error null или наоборот  error   и все остальные поля пустые
источник