0002 — インスタンス状態はTPH。遷移がエンティティを置き換える
コンテキスト
実行/バックテストインスタンスは、状態を移動します(pending → scheduled → starting → running → terminal)。状態をEF Core Table-Per-Hierarchy(TPH) でモデル化します。各状態はサブタイプ(StartingRunInstance、RunningRunInstanceなど)です。EFのTPH判別列は、既存の行で変更できません。
決定
状態遷移は、ステータスフィールドを変更する代わりに、エンティティを新しいサブタイプインスタンスで置き換えます。行は置き換えられるため、インスタンスidはstarting → running → terminalを通じて変わります。コンテナidは安定しており、遷移全体で保持されます。HTTPノードエージェントはステータス/レポート/ストップ/ログについてコンテナidでキー付けされます。
結果
- 各状態は、その状態でのみ有効なフィールドとメソッドを持つ異なるタイプです。不正な遷移と無意味なフィールドアクセスはランタイムチェックではなくコンパイルエラーです。
- 呼び出し元は、遷移全体でインスタンスidをキャッシュしないでください。コンテナidを、状態にまたがるものの安定ハンドルとして使用してください。
- 遷移ロジックは
InstanceTransitionsに存在します。idの変更は意図的で、バグではありません。