Skip to main content

0002 — สถานะอินสแตนซ์คือ TPH; การเปลี่ยนแปลงแทนที่เอนทิตี

บริบท​

อินสแตนซ์เรียกใช้/ย้อนกลับเคลื่อนไหวผ่านสถานะ (pending → scheduled → starting → running → terminal) เราจำลองสถานะด้วย EF Core Table-Per-Hierarchy (TPH): แต่ละสถานะคือประเภทย่อย (StartingRunInstance, RunningRunInstance และอื่น ๆ) คอลัมน์ discriminator ของ EF ของ TPH ไม่สามารถเปลี่ยนแปลง บนแถวที่มีอยู่

การตัดสินใจ​

การเปลี่ยนแปลงสถานะ แทนที่เอนทิตี ด้วยอินสแตนซ์ประเภทย่อยใหม่แทนที่จะกลายเป็นฟิลด์สถานะ เพราะแถวจะถูกแทนที่ รหัสอินสแตนซ์จึงเปลี่ยนแปลง ข้ามการเริ่มต้น → การทำงาน → terminal รหัสคอนเทนเนอร์มีเสถียรภาพ และจะถูกนำไปข้ามการเปลี่ยนแปลง; เอเจนต์โหนด HTTP ได้รับคีย์โดยรหัสคอนเทนเนอร์สำหรับสถานะ/รายงาน/หยุด/บันทึก

ผลที่ตามมา​

  • แต่ละสถานะเป็นประเภทที่แตกต่างกันโดยมีเฉพาะฟิลด์และวิธีการที่ถูกต้องในสถานะนั้น — การเปลี่ยนแปลงที่ผิดกฎหมายและการเข้าถึงฟิลด์ที่ไม่สมเหตุสมผลคือข้อผิดพลาดในการรวบรวม ไม่ใช่การตรวจสอบรันไทม์
  • ผู้เรียกจะต้อง ไม่ แคชรหัสอินสแตนซ์ข้ามการเปลี่ยนแปลง; ใช้รหัสคอนเทนเนอร์เป็นที่จัดการที่มีเสถียรภาพสำหรับสิ่งใดก็ตามที่ครอบคลุมสถานะ
  • ตรรมชาติการเปลี่ยนแปลงอาศัยอยู่ใน InstanceTransitions; การเปลี่ยนแปลง id นั้นตั้งใจเจตนา ไม่ใช่บั๊ก