Расскажи про архитектуру Presentation слоя в MVVM

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

Ответ

MVVM (Model-View-ViewModel) разделяет приложение на три слоя. Presentation слой включает View и ViewModel:

  1. View (Activity/Fragment) – отвечает за UI, обработку событий и отображение данных. Не содержит бизнес-логики, только взаимодействие с ViewModel.
  2. ViewModel – хранит и обрабатывает данные для View, обеспечивает связь с Model (бизнес-логикой). Переживает изменения конфигурации (например, поворот экрана).

Связь между View и ViewModel:

  • View подписывается на LiveData/Flow из ViewModel.
  • View вызывает методы ViewModel для действий пользователя.

Пример:

// ViewModel
class MyViewModel : ViewModel() {
    private val _data = MutableLiveData<String>()
    val data: LiveData<String> = _data

    fun loadData() {
        _data.value = "Loaded data"
    }
}

// View (Fragment)
viewModel.data.observe(viewLifecycleOwner) { data ->
    textView.text = data
}
button.setOnClickListener { viewModel.loadData() }

Принципы:

  • View не знает о Model.
  • ViewModel не имеет ссылок на View (избегаем утечек памяти).
  • Данные приходят через наблюдаемые компоненты (LiveData/StateFlow).