0002 — สถานะอินสแตนซ์คือ TPH; การเปลี่ยนแปลงแทนที่เอนทิตี
บริบท
อินสแตนซ์เรียกใช้/ย้อนกลับเคลื่อนไหวผ่านสถานะ (pending → scheduled → starting → running → terminal) เราจำลองสถานะด้วย EF Core Table-Per-Hierarchy (TPH): แต่ละสถานะคือประเภทย่อย (StartingRunInstance, RunningRunInstance และอื่น ๆ) คอลัมน์ discriminator ของ EF ของ TPH ไม่สามารถเปลี่ยนแปลง บนแถวที่มีอยู่
การตัดสินใจ
การเปลี่ยนแปลงสถานะ แทนที่เอนทิตี ด้วยอินสแตนซ์ประเภทย่อยใหม่แทนที่จะกลายเป็นฟิลด์สถานะ เพราะแถวจะถูกแทนที่ รหัสอินสแตนซ์จึงเปลี่ยนแปลง ข้ามการเริ่มต้น → การทำงาน → terminal รหัสคอนเทนเนอร์มีเสถียรภาพ และจะถูกนำไปข้ามการเปลี่ยนแปลง; เอเจนต์โหนด HTTP ได้รับคีย์โดยรหัสคอนเทนเนอร์สำหรับสถานะ/รายงาน/หยุด/บันทึก
ผลที่ตามมา
- แต่ละสถานะเป็นประเภทที่แตกต่างกันโดยมีเฉพาะฟิลด์และวิธีการที่ถูกต้องในสถานะนั้น — การเปลี่ยนแปลงที่ผิดกฎหมายและการเข้าถึงฟิลด์ที่ไม่สมเหตุสมผลคือข้อผิดพลาดในการรวบรวม ไม่ใช่การตรวจสอบรันไทม์
- ผู้เรียกจะต้อง ไม่ แคชรหัสอินสแตนซ์ข้ามการเปลี่ยนแปลง; ใช้รหัสคอนเทนเนอร์เป็นที่จัดการที่มีเสถียรภาพสำหรับสิ่งใดก็ตามที่ครอบคลุมสถานะ
- ตรรมชาติการเปลี่ยนแปลงอาศัยอยู่ใน
InstanceTransitions; การเปลี่ยนแปลง id นั้นตั้งใจเจตนา ไม่ใช่บั๊ก