Skip to content

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

@ultimate-deej

Description

@ultimate-deej

Сразу к сути: идея в том, чтобы отвязать интерактор от роутера.
Ведь как известно интерактор не должен зависеть от внешних слоёв и внешних библиотек. То, что он знает о 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'ом.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions