2f745ba328
- Refactor BootStatesController to implement IStatesController interface - Move state dictionary creation into constructor, remove static helper method - Add CancellationToken validation before state transitions in StatesController - Track current state presence with _hasCurrentState flag for safety - Update TASK-0002 with Ready status Выполнена задача TASK-0002 и обновлён статус: - Рефакторинг BootStatesController для реализации интерфейса IStatesController - Перемещено создание словаря состояний в конструктор, удалён статический вспомогательный метод - Добавлена валидация CancellationToken перед переходами между состояниями в StatesController - Добавлен флаг _hasCurrentState для отслеживания текущего состояния - Обновлён статус TASK-0002 до Ready
39 lines
2.4 KiB
Markdown
39 lines
2.4 KiB
Markdown
# TASK-0002: Базовая архитектура Boot Flow
|
||
|
||
## Статус
|
||
|
||
Ready
|
||
|
||
## Цель
|
||
|
||
Создать минимальную архитектурную основу для boot flow: сервисный lifecycle, state-контракты и generic state controller.
|
||
|
||
## Что сделать
|
||
|
||
- Создать `IService` с методами `InitializeAsync(CancellationToken ct)` и `ReleaseAsync(CancellationToken ct)`.
|
||
- Создать базовый `Service : IService`, если это упростит общую структуру.
|
||
- Создать `IState` с методами `EnterAsync(CancellationToken ct)` и `ExitAsync(CancellationToken ct)`.
|
||
- Создать `IStatesController<TEnum>` с методом `EnterStateAsync(TEnum code, CancellationToken ct)`.
|
||
- Реализовать `StatesController<TEnum>`.
|
||
- Создать `BootStateCode` для состояний `Splash`, `Load`, `Menu`.
|
||
- Создать `BootStatesController`, который собирает конкретные boot states и передает их в базовый controller.
|
||
|
||
## Технические требования
|
||
|
||
- Использовать UniTask для всех async-методов.
|
||
- Во все async-операции передавать `CancellationToken`.
|
||
- Контракт перехода должен быть строгим: сначала `ExitAsync` текущего state, затем `EnterAsync` нового state.
|
||
- `StatesController<TEnum>` не должен знать бизнес-логику boot flow.
|
||
- State не должен сам решать, какой state будет следующим.
|
||
|
||
## Критерии готовности
|
||
|
||
- `EnterStateAsync` вызывает `ExitAsync` текущего state перед `EnterAsync` нового state.
|
||
- Первый вход в state работает без попытки выйти из отсутствующего текущего state.
|
||
- Повторный вход в другой state не оставляет предыдущий state активным.
|
||
- `CancellationToken` проброшен через `EnterStateAsync`, `ExitAsync` и `EnterAsync`.
|
||
|
||
## Заметки
|
||
|
||
Generic state machine должна уметь только переключать состояния. Сценарий `Splash -> Load -> Menu -> Load` должен жить отдельно, чтобы не смешивать control flow и инфраструктуру state machine.
|