Выбор ответа Middle Архитектура: MVVM, MVI, Clean обновлено

Один UiState или несколько потоков

Вопрос

Почему экран лучше описывать одним UiState, а не пятью отдельными StateFlow (loading, items, error, query, isRefreshing)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Один объект делает состояние согласованным: нет невозможных комбинаций, изменения атомарны. При нескольких независимых потоках UI может увидеть промежуточную комбинацию, например loading = true и error != null одновременно, а логика согласования размазана.

Варианты ответа

  1. Один объект делает состояние согласованным: нет невозможных комбинаций, изменения атомарныправильный ответ
  2. Пять потоков нельзя собрать в одном Composable: collectAsState вызывается один раз
  3. Один поток быстрее пяти: каждый StateFlow держит свой поток и свой диспетчер
  4. Так требует Google Play для приложений с targetSdk 34 в разделе качества UI

Разбор

При нескольких независимых потоках UI может увидеть промежуточную комбинацию, например loading = true и error != null одновременно, а логика согласования размазана. Один UiState (data class или sealed) меняется атомарно через update, его легко тестировать и логировать. Собрать несколько потоков технически можно, скорость и правила стора тут ни при чём.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.