Files
QuizPlease/Agent/Task/TASK-0004.md
T
horooko 6c46b3043a feat: add agent tasks and update documentation
- Create 7 new task files (TASK-0001 through TASK-0007)
- Add task template file for future use
- Update Agent.md with project information
- Update TASK.md with task tracking
2026-05-27 03:36:25 +07:00

34 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TASK-0004: UI база и ViewModel слой
## Цель
Создать базовый UI слой, в котором View отвечает только за Unity-ссылки и биндинги, а логика находится во ViewModel или state/flow сервисах.
## Что сделать
- Создать `IUIViewModel`.
- Создать `UIView : MonoBehaviour` с методами `Initialize()` и `Release()`.
- Создать `UIView<TVm> : 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<TVm>`.
- ViewModel можно передать во View явно перед `Initialize()`.
- `Release()` безопасен при повторном вызове.
- View не вызывает `FindObjectOfType`, не хранит глобальное состояние и не управляет переходами state machine.
## Заметки
MonoBehaviour должны оставаться presentation layer. Это соответствует задаче: логика находится в VM или сервисах, View только показывает состояние и прокидывает UI-события.