MVVM или MVI
Вопрос
Сравни MVVM и MVI. Что ты используешь и какие проблемы встречал?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
MVVM: ViewModel отдаёт состояние, View вызывает методы
MVI: Intent, один State, Reducer, Side effects
Общий принцип UDF у обоих
Плюсы MVI: предсказуемость, тестируемость, логирование переходов
Минусы MVI: шаблонный код, раздутый State, сложность с событиями
На практике MVVM с одним UiState близок к MVI
Что могут спросить следом
- Как реализовать reducer на StateFlow?
- Как избежать раздутого State?
Разбор
В MVVM ViewModel отдаёт observable-состояние, а View вызывает её методы. В старом варианте это десяток LiveData, которые легко рассогласовать. MVI формализует поток: действия пользователя описаны sealed-классом, состояние экрана один неизменяемый объект, а переход от старого состояния к новому делает чистая функция-редьюсер. Одноразовые эффекты, вроде навигации, идут отдельным каналом. Плюсы MVI: вся логика изменений в одном месте, легко логировать и воспроизводить баги, тесты это проверка «действие плюс состояние даёт новое состояние». Минусы: больше шаблонного кода, состояние сложного экрана разрастается, и с событиями нужно аккуратно. На практике я использую MVVM с одним UiState и методами или sealed-действиями, это почти MVI без лишней церемонии. На большом экране с множеством взаимодействий полноценный редьюсер окупается.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.