What does the ViewModel do in MVVM?
The ViewModel in the MVVM (Model-View-ViewModel) architecture is the central layer that connects the data (Model) and the interface (View). It manages all the presentation logic: it holds the screen state, handles user actions, and updates data, while knowing nothing about the interface itself.
1. The main role of the ViewModel
The ViewModel is the "brain" of the interface. It knows what must be shown, but not how it looks.
2. Main responsibilities
1. Holds the screen state
Contains all the data needed to display the View: text, lists, loading flags, errors, and so on. When this data changes, the View updates automatically through data binding.
Example:
isLoading = true → the View shows a loading indicator,
userName = "Maria" → the text on the screen changes without extra code.
2. Handles user actions
On clicks, swipes, or data input, the ViewModel receives an event from the View and decides what to do:
- calls Model methods,
- updates the state,
- notifies the View that the data has changed.
Example:
The user clicked the "Save" button → ViewModel.saveUser() calls Model.save(),
and after it completes, updates saveStatus = "success".
3. Organizes the connection between the View and the Model
The ViewModel is a mediator that turns "raw" data from the model into a format convenient for display:
- formats dates, numbers, currency;
- filters or sorts lists;
- combines data from different sources.
Example:
user.birthDate from the model is turned into "25 years old" for the View.
4. Knows nothing about the View
The ViewModel has no references to UI components (buttons, fields, interface elements). It just provides data and commands, and the View "subscribes" to them.
This makes it possible to:
- test the ViewModel separately from the interface,
- use the same ViewModel with different Views (for example, a screen and a widget).
3. How it works (layer interaction)
User → View ↔ ViewModel ↔ Model- The user interacts with the View (clicks a button).
- The View calls a command on the ViewModel (
onLoginClicked()). - The ViewModel calls Model methods (
auth.login()) and gets a result. - It updates its properties (
isLoading,userInfo). - The View updates automatically through binding.
4. Example in pseudocode
class UserViewModel {
val userName = ObservableField<String>()
val isLoading = ObservableField<Boolean>()
fun loadUser() {
isLoading.set(true)
userRepository.getUser { user ->
userName.set(user.name)
isLoading.set(false)
}
}
}The View is simply "subscribed" to userName and isLoading,
and it automatically updates the interface when they change.
Summary:
The ViewModel is the connecting link between the interface and the data. It manages state, logic, and commands, provides reactive updates of the View, and makes it possible to test the logic without launching the interface.
Short Answer
Interview readyA concise answer to help you respond confidently on this topic during an interview.