test

посмотрел пр и проект в целом, но не до конца еще, думаю остальное буду в процессе смотреть, основные моменты, которые бросились в глаза откомментил в гитлабе.
Еще очень хотелось бы учесть ряд моментов, пока мы не уехали дальше:
1) мне показалось пока что много всего лишнего добавлено что пока не используется и возможно не будет использоваться в дальнейшем, можно не сразу, но постепенно все лишнее повыкидывать (понимаю что это твои какие-то заготовки :))
2) презентеры показались достаточно замороченными, корутины вроде не используются все равно, и свой lyfecycle делать тоже не вижу особо смысла, так как в moxy свой уже реализован и лучше только его использовать (onfirstviewattach, attachview, dettachview и тп). Также нужна одинаковая для всех презентеров обработка ошибок, с возможностью переопределения частных случаев (например по дефолту показывать все network ошибки в тоасте, а там где надо переопределять ошибку отсутствия сети и показывать ее по-другому).
Пример того как я обычно это делаю и это в целом удобно и гибко
https://gitlab.com/snippets/1870439
https://gitlab.com/snippets/1870441

для rx подписок там внутри есть экстеншены compositeSubscribe и justSubscribe для подписок с compositeDisposable и без него соответственно, лучше их использовать вместо твоих withDefaults так как там по дефолту будет использовать одинаковый для всех defaultOnErrorConsumer
пример использования

userInteractor.observeUser()
                .defaults(schedulers)
                .compositeSubscribe(
                    onNext = { user ->
                        viewState.showUser(user)
                    }
                )


просьба обязательно именовать аргументы
onNext = {}, onSuccess={}, onError={} и тд. так код более читабельный нежели когда просто фигурные скобки везде
вот пример с переопределением дефолтного onerrorconsumer

authInteractor.signInWithPhoneNumber(phoneNumber)
            .compositeSubscribe(
                onSuccess = { viewState.showNext() },
                onError = object : OnErrorConsumer() {
                    override fun onError(error: Throwable) {
                        when (error) {
                            is AuthException -> viewState.showAuthError()
                            is UnauthorizedException -> router.navigateTo(Screens.SignIn)
                            else -> super.onError(error)
                        }
                    }
                }
            )


3) После того как учтешь пункт номер 2, можно будет убрать презентер и вью из базовых активити и фрагментов, так как в этом не будет необходимости, плю это требует везде указывать дженерик параметры, что не очень удобно и достаточно громоздко

4) просьба юзать shared префы только в репозитории, так как это хранилище так же как и бд
5) по возможности роутер использовать только в презентерах, можно во фрагментах и активити только если у них нет презентера, в некоторых случаях можно использовать роутер и прям в интеракторе если это требует бизнес логика
6) не складывать вью и презентеры в одном файле с активити и фрагментом, если у них есть какая-либо реализация, а если они пустые, то можно
7)

June 29, 2019
by Сергей Петров
0
2
Show more