Что это простыми словами
ViewModel — это черновик данных экрана, который не теряется при случайностях.
Аналогия: вы пишете длинное сообщение в мессенджере, случайно повернули телефон — и текст исчез, приходится набирать заново. Раздражает? ViewModel делает так, чтобы этого не происходило с данными в приложении. Вы заполнили форму, повернули экран — всё на месте. Положили товары в корзину, свернули приложение — список сохранился.
Технически это работает так: Android при повороте экрана пересоздаёт весь экран заново (как будто закрыл и открыл приложение), и данные могли бы потеряться. ViewModel хранит их в безопасном месте и отдаёт обратно новому экрану.
Официальное определение
Теперь, когда суть понятна, вот как ViewModel описывают в вакансиях и документации. Эту формулировку вы встретите у заказчика и в резюме — и теперь будете понимать, что за ней стоит.
«ViewModel — lifecycle-aware компонент для хранения и управления UI-данными, переживающий configuration changes».
Разберём по словам. «Lifecycle-aware» — умеет следить за жизненным циклом экрана и очищаться, когда экран больше не нужен, чтобы не занимать память. «UI-данные» — информация, которая отображается на экране: текст в полях, список товаров, состояние загрузки. «Configuration changes» — события вроде поворота экрана, смены языка или размера шрифта, при которых Android пересоздаёт экран, но ViewModel остаётся.
Какую задачу решает
Основная боль, которую убирает ViewModel: потеря данных при повороте экрана. Без неё разработчику пришлось бы вручную сохранять каждое значение и восстанавливать его — десятки строк кода на каждый экран.
Вторая задача: отделить бизнес-логику от визуальной части. В ViewModel живёт логика — загрузка данных с сервера, обработка нажатий, валидация формы. Сам экран только показывает результат. Благодаря этому код становится понятнее и легче тестируется.
Побочная польза: ViewModel автоматически очищает ресурсы (отменяет запросы, закрывает соединения), когда пользователь уходит с экрана. Это защищает от утечек памяти.
К какой экосистеме относится
Платформа — Android. Это мобильная разработка.
Язык — Kotlin (реже Java, но Kotlin — стандарт сейчас).
Фреймворк — Jetpack, набор официальных библиотек от Google для Android.
Специальность — Android-разработчик (иногда указывают как Mobile Developer).
ViewModel почти всегда работает в связке с другими компонентами Jetpack: LiveData или StateFlow для передачи данных на экран, Room для работы с локальной базой данных, Hilt для внедрения зависимостей. Это нормально видеть их вместе в одном резюме.
Чем заменяется
ViewModel — это современный стандарт Android-разработки. Альтернатив в том же смысле у него нет: это официальный рекомендованный Google способ управлять данными экрана.
Раньше, до появления ViewModel, ту же задачу решали другими способами: вручную сохраняли данные через onSaveInstanceState (много шаблонного кода) или использовали Retained Fragments (сложный и хрупкий подход). Если встретите эти термины в резюме старого Android-разработчика — это нормально, так делали раньше. Но в новых проектах используется ViewModel.
Переход на ViewModel дешёвый: разработчик, работавший без него, освоит за несколько дней. Это библиотека с простым API, а не отдельная школа мышления.
Что не путать
ViewModel ≠ паттерн MVVM. MVVM — это общий архитектурный подход (Model-View-ViewModel), а ViewModel из Jetpack — конкретная библиотека, которая помогает его реализовать. Они связаны, но это не синонимы.
ViewModel ≠ LiveData или StateFlow. Это разные инструменты, которые работают вместе: ViewModel хранит данные, а LiveData/StateFlow передают их на экран и сообщают об изменениях.
ViewModel ≠ база данных. ViewModel держит данные только пока приложение открыто. Если пользователь закрыл приложение и вернулся через час — ViewModel пуст. Для долговременного хранения используют Room или удалённый сервер.
ViewModel ≠ Jetpack. Jetpack — это набор библиотек, ViewModel — одна из них.
Насколько это важно при отборе
Короткий ответ: обычно это НЕ повод отбраковывать кандидата.
ViewModel — стандарт современной Android-разработки, и в большинстве актуальных проектов он есть. Поэтому отсутствие его в резюме может говорить о том, что кандидат давно не работал с новыми проектами. Но это повод задать вопрос, а не автоматически отсеивать.
Главное: если у кандидата есть опыт Android-разработки, он освоит ViewModel за несколько дней. Это не сложная технология и не отдельная школа — просто одна из библиотек. Отсеивать сильного Android-разработчика только из-за отсутствия конкретно ViewModel в резюме — ошибка.
Правильный подход: смотрите общий опыт с Android. Если кандидат писал приложения на Kotlin с Jetpack-компонентами (LiveData, Room, Navigation), то ViewModel он знает с высокой вероятностью, даже если явно не выписал. А если опыт старый и там указаны устаревшие подходы вроде Retained Fragments — уточните, работал ли он с современным стеком.
Когда стоит обратить внимание: если кандидат претендует на middle/senior позицию и нигде не упомянуты ни ViewModel, ни другие Jetpack-компоненты — это сигнал, что опыт может быть неактуальным.
Это общий ориентир. В разных компаниях требования отличаются, поэтому всегда сверяйтесь с текстом конкретной вакансии.