Выбор ответа Middle Архитектура: MVVM, MVI, Clean обновлено
Один UiState или несколько потоков
Вопрос
Почему экран лучше описывать одним UiState, а не пятью отдельными StateFlow (loading, items, error, query, isRefreshing)?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Один объект делает состояние согласованным: нет невозможных комбинаций, изменения атомарны. При нескольких независимых потоках UI может увидеть промежуточную комбинацию, например loading = true и error != null одновременно, а логика согласования размазана.
Варианты ответа
- Один объект делает состояние согласованным: нет невозможных комбинаций, изменения атомарныправильный ответ
- Пять потоков нельзя собрать в одном Composable:
collectAsStateвызывается один раз - Один поток быстрее пяти: каждый
StateFlowдержит свой поток и свой диспетчер - Так требует Google Play для приложений с targetSdk 34 в разделе качества UI
Разбор
При нескольких независимых потоках UI может увидеть промежуточную комбинацию, например loading = true и error != null одновременно, а логика согласования размазана. Один UiState (data class или sealed) меняется атомарно через update, его легко тестировать и логировать. Собрать несколько потоков технически можно, скорость и правила стора тут ни при чём.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.