6c46b3043a
- 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
34 lines
2.0 KiB
Markdown
34 lines
2.0 KiB
Markdown
# 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-события.
|