Чистая архитектура входа в систему - PullRequest
0 голосов
/ 04 ноября 2018

Я разрабатываю экран входа в свое приложение для 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)
        }
    }

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

1 Ответ

0 голосов
/ 11 ноября 2018

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

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

...