Чистая архитектура входа в систему

1

Я разрабатываю экран входа в свое приложение для Android с чистой архитектурой.

При успешном использовании логина мне необходимо сохранить токен в общих настройках.

И на заставке мне нужно проверить, вошел ли пользователь в систему или нет

Поэтому мой вопрос в том, где идеальное место:

  1. Сохранить токен

я должен сохранить токен в LoginUseCase (слой домена)

class LoginUseCase(private val userRepository: UserRepository, private val schedulerProvider: SchedulerProvider) {

    fun execute(username: String, password: String): Single<Token> {
        return userRepository.login(username, password)
            .andThen(userRepository.saveToken(.....)
            .subscribeOn(schedulerProvider.getIOScheduler())
            .observeOn(schedulerProvider.getUIScheduler())
    }

}

Или я должен сделать токен сохранения как UseCase и сохранить токен в слое презентатора

class LoginPresenter(private val view: LoginContract.View,
                     private val setLoginStateUseCase: SetLoginStateUseCase,
                     private val loginUseCase: LoginUseCase,
                     private val schedulerProvider: SchedulerProvider): LoginContract.Presenter {

    private val compositeDisposable = CompositeDisposable()

    override fun performLogin(username: String, password: String) {

        if (username.isNullOrEmpty() || password.isNullOrEmpty()) {
            view.onShowLoginError("Field should not be empty")
        } else {
            view.showLoading()
            val disposable = loginUseCase.execute(username, password)
                    .subscribeOn(schedulerProvider.getIOScheduler())
                    .observeOn(schedulerProvider.getUIScheduler())
                    .andThen(setLoginStateUseCase.execute())
                    .subscribe({
                        view.hideLoading()
                        view.onLoginSuccess()
                    }, {error ->
                        view.hideLoading()
                        view.onShowLoginError(error.localizedMessage)
                    })
            compositeDisposable.add(disposable)
        }
    }

Тот же вопрос с проверкой пользователя залогинен или нет. Должен ли я сделать это действие вариантом использования?

Теги:
clean-architecture

1 ответ

1
Лучший ответ

На мой взгляд, имеет смысл выполнять эту операцию в случае использования доменного уровня. Представьте, что у вас есть другой модуль в том же проекте для телевизионного приложения. Вполне вероятно, что LoginPresenter может отличаться от модуля мобильного приложения, однако вы можете использовать тот же самый вариант использования. Таким образом, вам не нужно знать о каждом LoginPresenter вы реализуете, чтобы сохранить токен после выполнения LoginPresenter использования.

С другой стороны, я бы посоветовал взглянуть на то, как люди Google сталкиваются с процессом входа в систему, используя шаблон делегата в своем приложении ввода-вывода Google. Это очень распространенный currentUser использования currentUser наблюдаемого в вашем приложении, что дает вам множество преимуществ. Например, хотя я бы не назвал его эталонным проектом с чистой чистой архитектурой, ребята из kickstarter разработали интересную архитектуру MVVM+RxJava с использованием парадигмы currentUser, о которой я говорил, на которую тоже стоит взглянуть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню