# TASK-0004: UI база и ViewModel слой ## Статус Ready ## Цель Создать базовый UI слой, в котором View отвечает только за Unity-ссылки и биндинги, а логика находится во ViewModel или state/flow сервисах. ## Что сделать - Создать `IUIViewModel`. - Создать `UIView : MonoBehaviour` с методами `Initialize()` и `Release()`. - Создать `UIView : UIView where TVm : IUIViewModel`. - Добавить явную привязку ViewModel во View через метод вроде `Bind(TVm vm)` или `Setup(TVm vm)`. - Сделать `Release()` идемпотентным для всех View. - Подготовить View для splash, loading и menu экранов. ## Технические требования - ViewModel должна быть обычным C#-классом, не `MonoBehaviour`. - Runtime-данные передавать во View явно, а не через DI-поля MonoBehaviour. - View не должна содержать orchestration-логику boot flow. - Все подписки и listeners должны сниматься в `Release()`. - Повторный вызов `Release()` не должен приводить к ошибкам. ## Критерии готовности - Есть базовые классы `UIView` и `UIView`. - ViewModel можно передать во View явно перед `Initialize()`. - `Release()` безопасен при повторном вызове. - View не вызывает `FindObjectOfType`, не хранит глобальное состояние и не управляет переходами state machine. ## Заметки MonoBehaviour должны оставаться presentation layer. Это соответствует задаче: логика находится в VM или сервисах, View только показывает состояние и прокидывает UI-события.