メインコンテンツまでスキップ

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の変更は意図的で、バグではありません。