Перейти к основному содержимому

0002 — Состояние Instance это TPH; переход заменяет сущность

Контекст​

Инстанция запуска/бэктеста проходит через состояния (pending → scheduled → starting → running → terminal). Мы моделируем состояние с EF Core Table-Per-Hierarchy (TPH): каждое состояние является подтипом (StartingRunInstance, RunningRunInstance, …). Колонна discriminator EF TPH не может меняться на существующей строке.

Решение​

Переход состояния заменяет сущность новым экземпляром подтипа вместо мутирования поля статуса. Потому что строка заменяется, ID инстанции меняется через starting → running → terminal. ID контейнера стабилен и несется через переходы; HTTP узел агент ключится по ID контейнера для status/report/stop/logs.

Последствия​

  • Каждое состояние является отдельным типом только с полями и методами действительными в этом состоянии — незаконные переходы и бессмысленный доступ поля являются ошибками компилирования, не проверками во время выполнения.
  • Вызывающие стороны не должны кешировать ID инстанции через переход; используйте ID контейнера как стабильный handle для чего-либо, что охватывает состояния.
  • Логика переходов живет в InstanceTransitions; изменение ID намеренно, не ошибка.