TGViewer
Mikhail Kolobov | Gamedev Forge Mikhail Kolobov | Gamedev Forge @gamedevforge · 1.08K subscribers
Post #240 1.02K

Forwarded from Лавка Разработчика (Andrey Vavilichev)

Еще день, еще схемка! MVVM подъехал

Дисклеймер: схемка расширяет информацию из
предыдущего поста

MVP, MVC, MVVM - распространенные архитектурные паттерны в разработке приложений. Многие говорят, что они фигово ложатся на геймдев, и доля правды в этом есть. Нюанс в том, чтобы понять кто такой View, а кто такой ViewModel/Controller/Presenter, кто из них является монобехом и кто кем управляет. Небольшая путанница, я бы сказал.

На мой скромный взгляд, лучше всего на движок ложится MVVM подход, потому что его легко можно раскидывать в виде дерева зависимостей спускаясь от корневых вьюмоделей и баиндеров и глубоко внутрь во вложенность. Очень хорошо ложится на движок, монобехи, префабы и т.д.

В своем опыте я видел несколько реализации MVVM, из них была плохая только одна: где ViewModel была монобехом. Было жутко неудобно и непонятно зачем так. Самая надежная схема (представлена в скриншоте) - когда модель представлена сервисами и обработчиками данных, вьюмодели могут ссылаться на сервисы, чтобы запрашивать данные или их изенение, а вью, которые представлены баиндерами (монобехами), могут получать данные из вьюмодели (которые доступны только на чтение), подписываться на них и посылать сигналы с запросом на изменение данных (читай Инпут). Вот и всё

Область видимости следующая:
- Данные никого не видят, их могут только обрабатывать снаружи
- Обработчики команд (данных) видят данные и могут их обрабатывать, больше ни о ком не знают
- Сервисы знают про обработчики команд, имеют данные для чтения и методы для запуска изменения данных. В теории могут создавать вьюмодели
- ВьюМодели знают про сервисы, поэтому могут туда посылать запросы на изменение данных. Также они знают о данных (через сервисы), и могут их конвертировать в удобный формат. Например: при изменении количества объектов в инвентаре реагировать внутренним дополнительным флагом IsInventoryEmpty, эти данные торчат наружа (публичные) в виде реактивных свойств. Ну и методы инпута есть, которые прилетают из монобехов
- Вью (то есть баиндеры), знают про их вьюмодель. Она передается через специальный метод Bind(). Таким образом вью может подписаться на изменение данных (даже обработанных вьюмоделью), и посылать сигналы через публичные методы (инпут).

Как-то так. Остались вопросы - обязательно задавай в комментах!
  • 🔥 7
  • ❤ 4
  • 🥰 4
More from @gamedevforge
  1. Sep 22, 2026Это пока что мое любимое видео про создание игры целиком через ИИ. В отличие от всех говно…
  2. Sep 21, 2026Спорим, большинство закинут книгу в гпт и спросят "перескажи кратко че там"?
  3. Sep 10, 2026Пока все теребонькали свои клоды и кодексы, то пропустили самую ненужную фичу
  4. Sep 9, 2026Claude выкатил список скиллов для Unity https://claude.com/plugins/unity И чет... хз, звуч…
  5. Sep 5, 2026Ну что, кто-то уже сделал GTA 7 в один промпт на GPT 6 Astra?
  6. Aug 3, 2026Я каждый раз вымираю от этих рассылок Если кто-то не до конца понимает контекст, давайте н…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →