Скоупы и время жизни объектов
Вопрос
Расскажите про скоупы зависимостей на примере приложения с авторизацией.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Скоуп отражает жизненный цикл данных, а не удобство
Приложение: клиент, конфиг, аналитика без пользовательских данных
Сессия: репозитории и кеши пользователя, уничтожаются при выходе
Экран и поток: view model, состояние оформления
Риски: утечка данных между аккаунтами, удержание тяжёлых объектов
Смена аккаунта как тестовый сценарий
Что могут спросить следом
- Как реализовать скоуп сессии в Hilt или Koin?
- Что с фоновыми задачами при выходе пользователя?
Разбор
Скоуп определяется тем, сколько живут данные. На уровне приложения только то, что не содержит пользовательских данных: сетевой клиент без токена, конфигурация, аналитика. Всё, что связано с пользователем (профиль, корзина, кеш заказов, токены), живёт в скоупе сессии: при входе создаётся, при выходе уничтожается целиком, и данные прошлого аккаунта физически не могут показаться следующему. Экраны и потоки (оформление заказа) имеют свои скоупы. В Hilt для сессии делают свой компонент или менеджер, пересоздающий объекты, в Koin используют scope. Отдельно продумываю фоновые задачи: при выходе их нужно отменить, иначе они допишут данные в уже чужую сессию. И держу в регрессе сценарий «выйти и войти другим пользователем».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.