Tôi đã luôn nghĩ rằng một người quản lý tài sản tốt nên có nhiều chế độ hoạt động. Các chế độ này rất có thể là các mô-đun nguồn riêng biệt tuân thủ một giao diện chung. Hai chế độ hoạt động cơ bản sẽ là:
- Chế độ sản xuất - tất cả tài sản là cục bộ và tước bỏ tất cả dữ liệu meta
- Chế độ phát triển - các thử nghiệm được lưu trữ trong cơ sở dữ liệu (ví dụ: MySQL, v.v.) với dữ liệu meta bổ sung. Cơ sở dữ liệu sẽ là một hệ thống hai lớp với cơ sở dữ liệu cục bộ lưu trữ cơ sở dữ liệu dùng chung. Người tạo nội dung sẽ có thể chỉnh sửa và cập nhật cơ sở dữ liệu được chia sẻ và các bản cập nhật được tự động chuyển sang hệ thống nhà phát triển / QA. Nó cũng có thể tạo nội dung giữ chỗ. Vì mọi thứ đều nằm trong cơ sở dữ liệu, các truy vấn có thể được thực hiện trên cơ sở dữ liệu và các báo cáo được tạo để phân tích trạng thái của sản xuất.
Bạn sẽ cần một công cụ có thể lấy tất cả các thử nghiệm từ cơ sở dữ liệu được chia sẻ và tạo bộ dữ liệu sản xuất.
Trong những năm làm nhà phát triển, tôi chưa bao giờ thấy bất cứ điều gì như thế này, mặc dù tôi chỉ làm việc cho một số ít các công ty nên quan điểm của tôi không thực sự đại diện.
Cập nhật
OK, một số phiếu tiêu cực. Tôi sẽ mở rộng về thiết kế này.
Thứ nhất, bạn không thực sự cần các lớp học vì nếu bạn có:
TextureHandle tex = pRm->getResource<Texture>( "test.otx" );
bạn biết loại, vì vậy chỉ cần làm:
TextureHandle tex = new TextureHandle ("test.otx");
nhưng sau đó, điều tôi đã cố gắng nói ở trên là dù sao bạn cũng sẽ không sử dụng tên tệp rõ ràng, kết cấu cần tải sẽ được chỉ định bởi mô hình mà kết cấu được sử dụng, vì vậy bạn thực sự không cần tên người đọc được, nó có thể là một giá trị nguyên 32 bit, giúp CPU xử lý dễ dàng hơn nhiều. Vì vậy, trong hàm tạo cho TextureHandle, bạn có:
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 sử dụng tham số resource_id để tìm vị trí của dữ liệu. Cách thức thực hiện việc này sẽ phụ thuộc vào môi trường bạn đang chạy:
Trong Phát triển: luồng tìm kiếm ID trong cơ sở dữ liệu (ví dụ sử dụng SQL) để lấy tên tệp và sau đó mở tệp, tệp có thể được lưu trữ cục bộ hoặc được kéo từ máy chủ nếu tệp cục bộ không tồn tại hoặc là hết hạn.
Trong Bản phát hành: luồng tìm kiếm ID trong bảng khóa / giá trị để lấy phần bù / kích thước thành một tệp lớn, được đóng gói (như tệp WAD của Doom).