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
2.4 KiB
2.4 KiB
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.