Что это простыми словами

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-компоненты — это сигнал, что опыт может быть неактуальным.

Это общий ориентир. В разных компаниях требования отличаются, поэтому всегда сверяйтесь с текстом конкретной вакансии.