ฉันคิดเสมอว่าผู้จัดการสินทรัพย์ที่ดีควรมีหลายโหมดการทำงาน โหมดเหล่านี้น่าจะเป็นโมดูลแหล่งแยกต่างหากที่ยึดติดกับอินเตอร์เฟสทั่วไป โหมดการทำงานพื้นฐานสองโหมดคือ:
- โหมดการผลิต - สินทรัพย์ทั้งหมดอยู่ภายในเครื่องและดึงข้อมูลเมตาทั้งหมด
- โหมดการพัฒนา - การทดสอบจะถูกเก็บไว้ในฐานข้อมูล (เช่น MySQL, ฯลฯ ) พร้อมข้อมูลเมตาเพิ่มเติม ฐานข้อมูลจะเป็นระบบสองชั้นที่มีฐานข้อมูลภายในแคชฐานข้อมูลที่ใช้ร่วมกัน ผู้สร้างเนื้อหาจะสามารถแก้ไขและอัปเดตฐานข้อมูลที่ใช้ร่วมกันและอัปเดตโดยอัตโนมัติไปยังนักพัฒนา / ระบบควบคุมคุณภาพ มันควรจะเป็นไปได้ที่จะสร้างเนื้อหาตัวแทน เนื่องจากทุกอย่างอยู่ในฐานข้อมูลจึงสามารถสร้างคิวรีบนฐานข้อมูลและรายงานที่สร้างขึ้นเพื่อวิเคราะห์สถานะของการผลิตได้
คุณต้องการเครื่องมือที่สามารถรับการทดสอบทั้งหมดจากฐานข้อมูลที่แชร์และสร้างชุดข้อมูลการผลิต
ในปีที่ผ่านมาในฐานะนักพัฒนาฉันไม่เคยเห็นอะไรแบบนี้มาก่อนแม้ว่าฉันจะได้ทำงานให้กับ บริษัท เพียงไม่กี่แห่งเท่านั้นดังนั้นมุมมองของฉันจึงไม่ได้เป็นตัวแทนจริงๆ
ปรับปรุง
ตกลงโหวตลบ ฉันจะขยายการออกแบบนี้
ประการแรกคุณไม่ต้องการคลาสจากโรงงานเพราะถ้าคุณมี:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
คุณรู้จักประเภทดังนั้นเพียงทำ:
TextureHandle tex = new TextureHandle ("test.otx");
แต่สิ่งที่ฉันพยายามพูดข้างต้นคือคุณไม่ต้องใช้ชื่อไฟล์อย่างชัดเจนพื้นผิวในการโหลดจะถูกระบุโดยรุ่นที่ใช้พื้นผิวอยู่ดังนั้นคุณไม่จำเป็นต้องมีชื่อที่มนุษย์อ่านได้ อาจเป็นค่าจำนวนเต็ม 32 บิตซึ่งเป็นเรื่องง่ายสำหรับ CPU ที่จะจัดการ ดังนั้นใน Constructor สำหรับ TextureHandle คุณจะต้อง:
if (texture already loaded)
update texture reference count
else
asset_stream = new AssetStream (resource_id)
asset_stream->ReadBytes
create texture
set texture ref count to 1
AssetStream ใช้พารามิเตอร์ resource_id เพื่อค้นหาตำแหน่งของข้อมูล วิธีการนี้จะขึ้นอยู่กับสภาพแวดล้อมที่คุณใช้:
ในการพัฒนา: สตรีมค้นหา ID ในฐานข้อมูล (โดยใช้ SQL เป็นต้น) เพื่อรับชื่อไฟล์จากนั้นเปิดไฟล์ไฟล์อาจถูกแคชในเครื่องหรือดึงออกจากเซิร์ฟเวอร์หากไม่มีไฟล์ในตัวเครื่องหรือเป็น ตกยุค.
ในรีลีส: สตรีมจะค้นหา ID ในตารางคีย์ / ค่าเพื่อรับออฟเซ็ต / ขนาดเป็นไฟล์ขนาดใหญ่ที่บรรจุ (เช่นไฟล์ WAD ของ Doom)