Я работаю над приложением Android, используя шаблон чистой архитектуры, и у меня есть сомнения, как правильно реализовать авторизацию.Является ли следующее решение чистым с точки зрения чистой архитектуры?
Я бы создал варианты использования, как показано ниже (выполняется из уровня представления):
LoginUseCase
(для предоставленных выборок логина и пароля)токен API через удаленный сервис и сохраняет в локальном источнике токена) LogoutUseCase
(очищает токен от LocalTokenSource
)
(интерфейс LocalTokenSource
будет храниться на уровне домена иего реализация в слое данных - своего рода хранилище)
И чтобы обновлять токены при каждом запуске приложения (это не случай использования с точки зрения пользователя, верно?), я бы создал компонент SessionManager
в доменеслой.SessionManager
будет отвечать за обновление токена и сохранение его в LocalTokenSource
.Каждый раз, когда начинается действие, от его докладчика я выполняю refreshToken()
для введенного SessionManager.
Что вы думаете о решении?
Если оно чисто, то как обрабатывать передачу токена удаленной службе для выполнениядругие методы API, которые требуют токен?Допустим, у меня есть PostsRepository
, который выбирает данные постов из удаленного сервиса.Должен ли я передавать токен из прецедента в метод репозитория, например repo.getPosts(token)
?Или введите LocalTokenSource
в хранилище, чтобы он мог читать токен самостоятельно?Не будет ли второй вариант нарушать правила чистой архитектуры, потому что LocalTokenSource
будет использоваться в 2 слоях?