Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Предложение по улучшению кейса аутентификации #22

Open
ultimate-deej opened this issue Oct 30, 2018 · 2 comments

Comments

@ultimate-deej
Copy link

Сразу к сути: идея в том, чтобы отвязать интерактор от роутера.
Ведь как известно интерактор не должен зависеть от внешних слоёв и внешних библиотек. То, что он знает о cicerone или о PIN_SCREEN - плохо.

Вместо этого, если уж возникла такая потребность, с ним следует работать как и с репозиториями (и с внешним миром вообще) через интерфейс, объявленный в слое домена. По сути интерфейс даже не должен представлять роутер, т.к. домен знать не знает, как в приложении реализована навигация. И такой уже есть в примере, это PinCodeListener.

Навскидку, в первом приближении это может выглядеть так. Вместо явного вызова роутера из интерактора:

private void subscribeToAuthHolder() {
    authHolder.subscribeToSessionExpired(() -> {
        if (pinCodeListener != null) pinCodeListener.needUpdatePinCode();
    });
}

реализуем PinCodeListener где-то в слое навигации (где, кстати?):

public class PinCodeUpdater implements PinCodeListener {
    ...

    public void needUpdatePinCode() {
       router.navigateTo(GlobalNavigator.PIN_SCREEN); 
    }

    ...
}

и прокидываем в домен как зависимость вместо роутера:

public class PinInteractorImpl implements PinInteractor {
    private PinCodeListener pinCodeListener;
    ...

    public PinInteractorImpl(AuthRepository authRepository, PinCodeListener pinCodeListener) {
        this.pinCodeListener = pinCodeListener;
        ...
    }

    private void subscribeToAuthRepos() {
        authRepository.subscribePinCodeNeedUpdate(pinCodeListener);
    }

    ...
}

Всё. Изменения минимальны, но домен избавился от зависимости. Можно и на модули резать :).

Если моё предложение вам понравилось, могу заняться pull request'ом.

@matzuk
Copy link
Member

matzuk commented Nov 3, 2018

Звучит хорошо. Давай оформим PR.
По поводу имплементации PinCodeListener. Можно где-то в presentation/navigation.
Я кстати обновлю инфо по пакетам за одно.

@ultimate-deej
Copy link
Author

Проект крашится, ветка sample_2. Ругается на call adapter factory и response body converter. В build.gradle кроме самого ретрофита ничего нет, хотя точно нужен адаптер для rxjava2.
Я туда хоть смотрю? https://github.com/AndroidArchitecture/AuthCase/tree/sample_2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants