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

Скоупы и время жизни объектов

Вопрос

Расскажите про скоупы зависимостей на примере приложения с авторизацией.

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Скоуп определяется тем, сколько живут данные. На уровне приложения только то, что не содержит пользовательских данных: сетевой клиент без токена, конфигурация, аналитика.

Что должно прозвучать в ответе

  • Скоуп отражает жизненный цикл данных, а не удобство

  • Приложение: клиент, конфиг, аналитика без пользовательских данных

  • Сессия: репозитории и кеши пользователя, уничтожаются при выходе

  • Экран и поток: view model, состояние оформления

  • Риски: утечка данных между аккаунтами, удержание тяжёлых объектов

  • Смена аккаунта как тестовый сценарий

Что могут спросить следом

  • Как реализовать скоуп сессии в Hilt или Koin?
  • Что с фоновыми задачами при выходе пользователя?

Разбор

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

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

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