Выбор ответа Senior Внедрение зависимостей обновлено

Данные прошлого пользователя после смены аккаунта

Вопрос

После выхода и входа под другим аккаунтом на экране мелькают заказы прошлого пользователя. Какая архитектурная причина вероятнее всего?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Репозиторий с кешем данных пользователя зарегистрирован синглтоном и не пересоздаётся при смене сессии. Кеши и репозитории пользовательских данных должны жить в скоупе сессии: при выходе скоуп уничтожается, при входе создаётся новый.

Варианты ответа

  1. Сервер вернул заказы прошлого пользователя из-за кеша на стороне API-шлюза
  2. Экран заказов кешируется операционной системой как снимок для переключателя приложений и показывается при входе
  3. Репозиторий с кешем данных пользователя зарегистрирован синглтоном и не пересоздаётся при смене сессииправильный ответ
  4. Проблема в анимации перехода: старый экран заказов на долю секунды остаётся видимым под новым при входе

Разбор

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

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.