มีวิธีมากมายในการจัดการปัญหาเกี่ยวกับเวอร์ชัน คุณสามารถทำได้โดยมีหนึ่งฟังก์ชั่นโหลดต่อรุ่นคุณสามารถลองดำเนินการอัตโนมัติโดยอธิบาย (ผ่านคุณสมบัติทั่วไป) การเปลี่ยนแปลงของโครงสร้างสินทรัพย์ในช่วงเวลาที่คุณสามารถทำการตรวจสอบเฉพาะรุ่นภายในฟังก์ชั่นโหลด / บันทึกและอื่น ๆ .
ฉันชอบวิธีการ "อธิบายการเปลี่ยนแปลง" แต่พบว่าการพยายามทำสิ่งต่างๆผ่านแอททริบิวต์นั้นรวดเร็วอย่างไม่น่าเชื่อ ฉันจะใช้ฟังก์ชั่นแทน ใช้ฟังก์ชั่นที่แปลงข้อมูลในรุ่นN
เป็นข้อมูลในรุ่นN + 1
สำหรับรุ่นที่เหมาะสมทั้งหมดของคุณ ในการโหลดให้ตรวจสอบเวอร์ชันกับเวอร์ชันล่าสุดและหากไม่ใช่ให้เรียกใช้ข้อมูลผ่านฟังก์ชั่นการกำหนดเวอร์ชันที่เหมาะสมทั้งหมด บันทึกเวอร์ชันล่าสุดเสมอ
สิ่งนี้จะทำงานได้ดีที่สุดหากคุณทำการแปลงเมื่อข้อมูลยังอยู่ในรูปแบบค่าคีย์ไทม์ ซึ่งหมายความว่าคุณอาจต้องการนำเสนอข้อมูลของคุณซึ่งเป็นแนวทาง "คุณสมบัติถุงรันไทม์" เนื่องจากคุณไม่สามารถใช้รูปแบบค่าคีย์พื้นฐานของ JSON หรือ XML หากคุณมีรูปแบบไบนารีของคุณเอง ถ้าคุณไม่ทำเช่นนี้คุณยังอาจต้องให้คำจำกัดความของชั้นเก่ารอบ ๆ ที่ได้รับน่าเกลียด การมีทรัพย์สินของคุณในรูปแบบที่ไม่ดีนี้ก็มีประโยชน์อย่างมากสำหรับการพัฒนาโปรแกรมแก้ไขเกม
ในระหว่างการพัฒนาเมื่อคุณทำซ้ำข้อมูลของคุณมันจะทำให้เป็นรุ่นล่าสุดตามธรรมชาติและในที่สุดคุณก็สามารถลบฟังก์ชั่นการกำหนดเวอร์ชันเก่าได้ นี่เป็นวิธีการระดับสูงมากหรือน้อยที่เราใช้กับเนื้อหาศิลปะรุ่น (เช่นแผนที่) ใน Guild Wars 2
ตอนนี้ทุกอย่างที่กล่าวมาฉันคิดว่ามันมีประโยชน์ที่จะสนับสนุนทั้งข้อความและการทำให้เป็นอันดับแบบไบนารีสำหรับสินทรัพย์ ในระหว่างการพัฒนาให้เก็บข้อมูลทั้งหมดของคุณในรูปแบบที่มนุษย์สามารถอ่านได้โดยใช้ XML หรือ JSON สิ่งนี้สามารถเพิ่มความสามารถในการทำซ้ำได้มากเพราะคุณไม่จำเป็นต้องสร้างเครื่องมือที่ซับซ้อนเช่นการแก้ไขข้อมูล คุณสามารถกลับไปสู่ความสามารถในการปรับแต่งอย่างรวดเร็วด้วยมือ
ขั้นที่สองสมมติว่าคุณยังต้องการรูปแบบไบนารีสำหรับจัดส่งเกม (ซึ่งสามารถปรับปรุงขนาดไฟล์หรือเวลา IO ของไฟล์ได้ดังนั้นจึงเป็นความต้องการที่ถูกต้อง) ออกแบบ serialization และดีซีเรียลไลเซชัน API ของคุณเพื่อจัดการกับเวอร์ชัน รุ่นคือยังคงมีประโยชน์ในบริบทการจัดส่งสินค้าเพราะบางจุดที่คุณอาจต้องการการปรับปรุงเรือหรือแก้ไขข้อผิดพลาด มีเอกสารบางอย่างที่อธิบายความสามารถในการกำหนดเวอร์ชันของ. NET serializationและBoost ของอนุกรมที่คุณอาจพบว่าน่าสนใจ หากคุณกำลังจะให้การสนับสนุนทั้งข้อความและรูปแบบไบนารีให้แน่ใจว่าคุณทดสอบพวกเขาบางครั้ง (หรืออัตโนมัติสร้างการทดสอบจะทำเช่นนั้นได้ดียิ่งขึ้น)