Как MVVM используется в Jetpack Compose

«Как MVVM используется в Jetpack Compose» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

MVVM в Jetpack Compose применяется для разделения UI-логики (Compose) и бизнес-логики (ViewModel). ViewModel хранит состояние и обрабатывает события, а Compose отображает UI и реагирует на изменения состояния.

Пример:

// ViewModel
class CounterViewModel : ViewModel() {
    private val _count = mutableStateOf(0)
    val count: State<Int> = _count

    fun increment() {
        _count.value++
    }
}

// Composable
@Composable
fun CounterScreen(viewModel: CounterViewModel = viewModel()) {
    Column {
        Text(text = "Count: ${viewModel.count.value}")
        Button(onClick = { viewModel.increment() }) {
            Text("Increment")
        }
    }
}

Ключевые моменты:

  • ViewModel сохраняет состояние при конфигурационных изменениях
  • Compose подписывается на State из ViewModel через remember
  • События передаются в ViewModel через вызовы методов
  • Для внедрения ViewModel используется viewModel()