Прошло уже лет 25 со дня изобретения концепции Model‑View‑Controller, а споры и её модификации не завершаются по сей день. Хотя очевидно, что в изначальном виде эта концепция ужасна, не объектно‑ориентирована и избыточна. А избыточно именно наличие контроллера, в то время как разделение визуализации и бизнес‑логики является сердцем этой концепции, из‑за чего и живет эта идея до сих пор. Но вопрос контроллера замыливается, хотя понятно, что на его месте должна быть реализация биндинга. Особенно, когда в игровом движке Unity это биндинг уже есть изначально, хотя и появился косвенно. Об этом подробно рассказываю в следующем видео.
0:00 Мы не будем делать полноценное MVC.
1:40 Пример визуализации (View) и задачи.
3:46 Специфика Unity.
5:00 Создание класса визуализации PersonUI и префабов PersonSlot и PersonSlotExt.
12:15 Биндинг реализуется через связь визуальных элементов в префабах со свойствами класса PersonUI.
15:50 Пример создания объекта на сцене через префаб, заполнение свойств класса PersonUI из класс Person, выполняющего роль модели.
17:00 Класс визуализации PersonUI агрегируется в классе модели Person как часть.
18:00 Создаем реакцию на событие нажатия кнопки — метод OnClick().
24:00 В визуальном классе PersonUI создаем событие Click, которое произойдет в методе OnClick() в момент нажатия пользователем на кнопку.
28:00 В невизуальном классе Person создаем метод ViewPersonInfo(), который синхронизирует свойства визуального класса с невизуальным.
37:15 В классе Society (старшая в иерархии модель) агрегируем класс PersonUI, который будет использоваться для разных Person.
45:10 Подписываемся на событие Click в классе Society.
46:40 Добавляем параметр в делегат события, который позволит узнать Id персоны на которой кликнули (нажали кнопку).
54:20 Тестируем, исправляем баги.
1:01:40 Заработало.
1:06:00 Дополнительная доработка, рефакторинг и т. д.