Магія MVI. Або як легко перейти з MVVM і не пошкодувати

Євгеній Маслак

MVI (Model-View-Intent) — це архітектурний патерн для розробки програмного забезпечення, який часто використовується в Android-розробці. Зокрема, в розробці на Jetpack Compose.

Як і дорослі партнерські відносини, все починається з контракту. Саме контракт, як і в усіх дорослих партнерських відносинах, визначає перелік наших дій, компетенцій, відповідальності тощо.

Це контракт між нашим UI та ViewModel в якій буде міститись зберігання стану і обробка подій.

Ось і почалась магія, помітили? Як легко ми опрацювали дані які нам прийшли. Два поля і натискання кнопки «Save». А коду написали буквально кілька рядків.

Вся магія обробки ховається у BaseViewModel. Але якщо глянути на неї ближче, то і там нічого складного немає.

Як бачите, я не збрехав — нічого складного.

Нам лиш треба реалізувати дві функції initState(), яка ініціалізує первісний стан UI. Та handleEvent(), яка всі події і обробляє. Що ми успішно і зробили.

Виглядає так, ніби нічого особливого. Код, який нам не довелось писати у ExampleViewModel ми написали у BaseViewModel, та ще й контракт додали з купою додаткових даних.

Але коли у вас багато екранів, багато в’юмоделей, такий підхід значно скоротить і спростить розробку — для зміни стану якогось елемента на UI не потрібно писати окремий метод бо є setState().

А на UI достатньо викликати setEvent() і він передасть усю інформацію про подію, яка відбулась у в’юмодель.

Це також спрощує додавання в’юмоделі у compose function. Адже всі, хто розробляє на Jetpack Compose прекрасно знають, що як тільки додав в’юмодель — preview успішно зламалось. Так, це все можна обійти, але не всі способи зручні, особливо коли в’юмодель приймає купу аргументів

То ж зараз я покажу досить простий спосіб як це зробити з малими затратами праці (як я і люблю).

Це наш UI. Як бачите, він містить всього два колбеки для обробки події та навігації. Якби наша в’юмодель мала функцію на кожну подію, то колбеків би знадобилось значно більше.

І завершальний шматок коду, де все починається. А може закінчується, це вже з якого боку подивитись.

Ось така ось магія, яка не містить жодної магії.

Раніше я до цього патерну ставився скептично, адже звик користуватись MVVM. Тепер от думаю, що як я жив без цього раніше.

Спробуйте та переконайтесь і самі, якщо не пробували.

А якщо пробували — діліться досвідом. Адже ніщо не досконале, і в цього зручного патерну теж є певні обмеження і застереження.

Цей текст з особистого блогу, опублікований з дозволу автора.

Останні статті

Google випускає функцію, яка дозволить писати SQL-запити за допомогою звичайного тексту

Google анонсує нову функцію Comments to SQL, яка дає можливість писати SQL-запити природною англійською мовою…

19.01.2026

У ChatGPT може з’явитись трансляція музики та обробка завантажених файлів

Аналіз коду веб-додатку ChatGPT виявив відразу декілька нових функцій, які готують до релізу. Схоже, OpenAI…

19.01.2026

Meta закриває проект Workrooms — віртуальні простори для віддаленої роботи

Керівництво Meta ухвалило рішення припинити підтримку Workrooms як окремого додатку з 16 лютого 2026 року.…

16.01.2026

У ChatGPT з’явився розширений пошук в історії діалогів. Тільки для платних користувачів

Компанія OpenAI випустила велике оновлення для ChatGPT з підтримкою розширеного пошуку в історії чатів, але…

16.01.2026

У програмах, згенерованих штучним інтелектом, багато помилок безпеки — дослідження

Застосунки, створені за допомогою вайб-кодування, де розробник надає агенту штучного інтелекту повну свободу дій, ймовірно,…

16.01.2026

Українська компанія MacPaw закриває свій маркетплейс Setapp Mobile

Одна з найбільших українських продуктових IT-компаній MacPaw оголосила про закриття з 16 лютого 2026 року…

16.01.2026