Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я долгое время использовал Moxy, и меня не покидало ощущение, что с этим ViewState я делаю абсолютно тоже самое что и в MVVM. 99% времени я использовал только AddToEndSingleStrategy и OneExecutionStateStrategy (как наверное и все пользователи этой библиотеки).
@StateStrategyType(AddToEndSingleStrategy::class)
fun switchProgress(show: Boolean)
// Тоже самое что и
val progress: LiveData<Boolean> // или BehaviourRelay / StateFlow@StateStrategyType(OneExecutionStateStrategy::class)
fun showToastError()
// Тоже самое что и
val toastError: SingleLiveEvent<Unit>В итоге с кодогенерацией получался некий мост между MVP и MVVM, когда ViewState всегда хранил актуальное состояние экрана и выступал в роли ViewModel, на которую "подписывалась" View, а Presenter менял состояние через ViewState. Так нужен ли этот мост сейчас, когда есть LiveData (либо любой другой Android-независимый Observable) и ViewModel? (раньше точно нужен был, т.к. в то время Jetpack'a еще не было)
Например, в случае MVVM, в модели может быть метод типа fun getData(): Data. Мы можем протестировать unit-тестом что вернул этот метод, но не то, как его использует View.
можно тщательнее протестировать поведение UI unit-тестом presenter'а
MVP для Android — преимущества использования Moxy в качестве вспомогательной библиотеки