Поговорим о том, что такое MVVM и немного о реактивном программировании. На примере Hustle Castle увидим, как начали внедрять MVVM на живом проекте и посмотрим, что из этого получилось.
плюсую. в том MVC что я сталкивался, view он же префаб, он же monobehaviour, и он не знает о модели и контролере вообще ничего, только свои события может испускать + иметь public аля Show/Hide/Play/UpdateName... и конроллер уже управляет или одним таким view или какой-то серией. В Hustle Castle чуть другое видение похоже было на тот момент. а PriceView с примера как-то натянуто вышло )) почему цвет не зашит в префабе? зачем это передавать? bool checkHasEnought вообще там не должно быть
Тоже решил комментарий на этот счет оставить, что реализация паттерна выбрана крайне неудачная. Слайд на 04:00 Такое ощущение, что те кто поддержал такую реализацию шаблон долго работали в web'е на фронтенде и слабо себе представляли как устроен движок unity. 😁
@@yuryshumovsky7814 в моём понимании Model - это объект с данными, ViewModel(Controller) - скрипт которые реагирует на изменения данных в Model и меняет значение в компонентах Text и т.д., а View - это то, что нам даёт Unity - сами компоненты Text, Image, Button и так далее
@@rox.3346 Не, это не правильное представление. Модель запускает ивенты при изменении своих данных. На эти ивенты подписаны копии данных во ViewModel. На данные во ViewModel подписан View-монобех, в котором есть рефы на ui-элементы. Так же ViewModel подписана на ивенты ui-элементов из View. Если юзер взаимодействует с ui, то ViewModel изменяет данные в модели, потом ViewModel изменяет свою копию этих данных и обновляет View.
Короче мозга пока хватило на такой вариант: В классе, где прописано расширение геймобжекта “Subscribe” можно создать статичный словарь, в котором ключ - это геймобжект и value - это List В методе DisposeOnDestroy добавляем в лист словаря по ключу в виде геймобджекта объект propertyHandler(он наследует IDisposable) Пишем метод расширения геймобжекта DisposeDependables, в котором проходим по нужному списку из словаря и вызываем Dispose у всех propertyHandler’ов Во вьюмодель, в OnDestroy прописываем вызов DisposeDependables. Т.е. вот так он вызывается: gameObject.DisposeDependables().
Опять поверхностный доклад. Где код? Где примеры прям в юнити+IDE? Как это выглядит на практике? Что за роутер, опять же не понятно - вроде сначала говорили, что в MVVM 3 компонента, а тут еще четвертый какой-то появился.
Да уж. В чем прикол объяснять алгоритм, но скрыть его исполнение. Как подписка и отписка View ко ViewModel происходит тоже не показано «Идем в обработку ивент провайдера» и тупо обработка ивент провайдера скрыта внутри не показанного метода. Браво, блин.
Если кому нужен проект с кодом, то ищите название репозитория в комментах к видео про производную в моем профиле. Здесь коммент с названием репозитория удаляется почему то.
8:08 ребят, то что вы связали слой логики и слой представления - это как бы фейл 💁♂️🤦♂️
А как не использовать пространство unity в VM? Допустим на нужен Transform или иные unity:вские типы, что делать тогда?
MVVM плохо подходит к геймплейному коду. MVVM это больше для UI
Хороший доклад
Вы неправильно прикрутили MVC: view - это монобех, controller - вчя логика, модель - это данные
плюсую. в том MVC что я сталкивался, view он же префаб, он же monobehaviour, и он не знает о модели и контролере вообще ничего, только свои события может испускать + иметь public аля Show/Hide/Play/UpdateName... и конроллер уже управляет или одним таким view или какой-то серией. В Hustle Castle чуть другое видение похоже было на тот момент.
а PriceView с примера как-то натянуто вышло )) почему цвет не зашит в префабе? зачем это передавать? bool checkHasEnought вообще там не должно быть
Тоже решил комментарий на этот счет оставить, что реализация паттерна выбрана крайне неудачная. Слайд на 04:00
Такое ощущение, что те кто поддержал такую реализацию шаблон долго работали в web'е на фронтенде и слабо себе представляли как устроен движок unity. 😁
@@yuryshumovsky7814 в моём понимании Model - это объект с данными, ViewModel(Controller) - скрипт которые реагирует на изменения данных в Model и меняет значение в компонентах Text и т.д., а View - это то, что нам даёт Unity - сами компоненты Text, Image, Button и так далее
@@rox.3346 Не, это не правильное представление. Модель запускает ивенты при изменении своих данных. На эти ивенты подписаны копии данных во ViewModel. На данные во ViewModel подписан View-монобех, в котором есть рефы на ui-элементы. Так же ViewModel подписана на ивенты ui-элементов из View. Если юзер взаимодействует с ui, то ViewModel изменяет данные в модели, потом ViewModel изменяет свою копию этих данных и обновляет View.
21:19 Что происходит внутри DisposeOnDestroy?
Короче мозга пока хватило на такой вариант:
В классе, где прописано расширение геймобжекта “Subscribe” можно создать статичный словарь, в котором ключ - это геймобжект и value - это List
В методе DisposeOnDestroy добавляем в лист словаря по ключу в виде геймобджекта объект propertyHandler(он наследует IDisposable)
Пишем метод расширения геймобжекта DisposeDependables, в котором проходим по нужному списку из словаря и вызываем Dispose у всех propertyHandler’ов
Во вьюмодель, в OnDestroy прописываем вызов DisposeDependables. Т.е. вот так он вызывается: gameObject.DisposeDependables().
Опять поверхностный доклад. Где код? Где примеры прям в юнити+IDE? Как это выглядит на практике? Что за роутер, опять же не понятно - вроде сначала говорили, что в MVVM 3 компонента, а тут еще четвертый какой-то появился.
Да уж. В чем прикол объяснять алгоритм, но скрыть его исполнение. Как подписка и отписка View ко ViewModel происходит тоже не показано
«Идем в обработку ивент провайдера» и тупо обработка ивент провайдера скрыта внутри не показанного метода. Браво, блин.
Я связался с Сергеем. Он сказал, что через несколько недель, как разгребет работу, подготовит и выложит на гитхаб код и здесь оставит ссылку.
Еще не выложил?
@@COOKIEMONSTER90
@@qwww..8628 выложил, но ссылку не добавил по ходу. Сейчас подумаю как ссылку запилить, чтобы коммент с ней не удалили
@@qwww..8628 короче на гитхабе уже удален репозиторий. У меня копия имеется, постараюсь завтра залить куда-нибудь и оставить ссылку
Если кому нужен проект с кодом, то ищите название репозитория в комментах к видео про производную в моем профиле. Здесь коммент с названием репозитория удаляется почему то.