Выбор ответа Senior Внедрение зависимостей обновлено
Данные прошлого пользователя после смены аккаунта
Вопрос
После выхода и входа под другим аккаунтом на экране мелькают заказы прошлого пользователя. Какая архитектурная причина вероятнее всего?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Репозиторий с кешем данных пользователя зарегистрирован синглтоном и не пересоздаётся при смене сессии. Кеши и репозитории пользовательских данных должны жить в скоупе сессии: при выходе скоуп уничтожается, при входе создаётся новый.
Варианты ответа
- Сервер вернул заказы прошлого пользователя из-за кеша на стороне API-шлюза
- Экран заказов кешируется операционной системой как снимок для переключателя приложений и показывается при входе
- Репозиторий с кешем данных пользователя зарегистрирован синглтоном и не пересоздаётся при смене сессииправильный ответ
- Проблема в анимации перехода: старый экран заказов на долю секунды остаётся видимым под новым при входе
Разбор
Кеши и репозитории пользовательских данных должны жить в скоупе сессии: при выходе скоуп уничтожается, при входе создаётся новый. Синглтон переживает логаут и отдаёт старые данные, пока не обновится. Это и баг, и проблема приватности. Решения: отдельный DI-скоуп «пользователь» (в Hilt свой компонент, в Koin scope), очистка кешей при логауте и ключ кеша с id пользователя.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.