2010-09-03 18 views
7

Tôi đang làm việc để thay thế hệ thống Quản lý tài nguyên (Trình quản lý tài nguyên QuickTime trên Mac và Windows) đã không được dùng nữa và tôi đã sử dụng mô hình hiện tại mà Qt sử dụng nơi dữ liệu được lấy từ tệp tài nguyên bằng cách sử dụng khóa chuỗi .Tại sao các số nhận dạng chuỗi được sử dụng để truy cập dữ liệu tài nguyên?

Ví dụ: tôi có thể có hình ảnh trong tệp tài nguyên của mình, "HungryBear.png" được lưu trữ trong tệp tài nguyên của tôi. Qt, và hệ thống đề xuất của tôi, sẽ nhận được nó trong một cách mô tả bởi các psuedocode:

image = GetImageResource("BearPlugin/Images/HungryBear.png"); 

Rõ ràng vào thời điểm đó những gì hình ảnh có nghĩa là, và nơi mà nó có thể được tìm thấy.

Trong hệ thống hiện tại của chúng tôi, chúng tôi sử dụng các số. Các vấn đề với các con số là người ta phải truy tìm tệp tài nguyên (có thể có nhiều) để tìm ra hình ảnh (hoặc tài nguyên) nào.

Một ví dụ về điều này:

oldActiveResourceFile = GetActiveResourceFile(); // think of a stack of resource files 

SetActiveResourceFile("BearPlugin"); 

image = GetImageResource(1); 

// Perhaps other resources are retrieved and other functions called 
// Possibly introduce problems by calling functions that change "Active Resource File" 

SetActiveResourceFile(oldActiveResourceFile); 

Phương pháp đầu tiên là những gì tôi đã thấy trong các hệ thống hiện truy cập dữ liệu tập tin tài nguyên. Tôi đã được thông báo rằng C# và Java sử dụng nó, tôi biết rằng họ làm cho các cặp khóa-giá trị chuỗi, v.v.

Tuy nhiên, một đồng đẳng của tôi đã bày tỏ lo ngại về việc thay đổi hệ thống hiện tại bằng cách sử dụng các ID số này cho các id chuỗi mà tôi đang đề xuất. Dường như có nhiều lợi ích và chúng khắc phục được nhiều vấn đề chúng ta gặp phải với hệ thống hiện tại. Tôi muốn có tài liệu hỗ trợ rằng hệ thống được đề xuất là tốt hơn và mong muốn, do đó, câu hỏi của tôi là:

Bạn có biết bất kỳ nghiên cứu hoặc thảo luận nào chứng minh rằng việc sử dụng mã định danh chuỗi (phân cấp) tốt hơn sử dụng một số tùy ý?

GHI CHÚ

  1. tôi có kế hoạch về việc sử dụng một file zip (có thể không nén) để chứa các tập tin dữ liệu.
  2. Chúng tôi có môi trường ứng dụng plugin. Ứng dụng và mỗi plugin có thể có các tệp tài nguyên riêng. Plugin có thể truy cập dữ liệu tài nguyên trong tệp tài nguyên của ứng dụng.
  3. Dưới đây là một số yêu cầu mà đã được xem xét và tôi tin rằng đáp ứng:

    • phát triển phần mềm phải có khả năng nhận diện các nguồn lực.
    • Nhà phát triển phần mềm có thể đặt tên cho các tài nguyên có tên có ý nghĩa.
    • Tài nguyên phải được liên kết với các phần của ứng dụng cần chúng.
    • Người bản địa hóa có thể dễ dàng xác định các tệp tài nguyên đã thay đổi.
    • Người bản địa hóa có thể sử dụng các công cụ của riêng họ để sửa đổi các tệp tài nguyên.
    • Khách hàng sẽ được thông báo trong trường hợp chức năng họ đang sử dụng dựa vào các cuộc gọi không được chấp nhận.
+0

Ngôn ngữ nào là mã này? – Powerlord

+0

Mã sẽ được viết bằng C++ cho Mac OS X và Windows XP/Vista/7. Tôi đã lên kế hoạch tạo một tệp nén chứa dữ liệu có thể là: 1) tệp hình ảnh, 2) tệp chuỗi có thể bản địa hóa, 3) tệp văn bản định nghĩa hộp thoại, 4) tệp âm thanh, 5) tệp tài nguyên khác . –

Trả lời

2

Những hạn chế chính khi sử dụng ID tài nguyên số là khả năng phát hiện (tìm ra tài nguyên 1234) và duy trì tính duy nhất của ID khi bạn thêm nhiều hơn theo thời gian trong các ứng dụng lớn.

Hạn chế chính khi sử dụng tên chuỗi cho ID tài nguyên là các chuỗi mất nhiều bộ nhớ hơn khi chạy. Ví dụ, mẫu .NET cho các tài nguyên sử dụng các tên chuỗi và các thẻ chuỗi đó nằm trong tệp thi hành trong thời gian chạy.

Tên chuỗi dễ dàng duy trì và tự ghi lại trên các ứng dụng lớn và nhiều lần sửa đổi (sử dụng đường dẫn phân cấp như trong ví dụ của bạn), nhưng lợi ích thực sự chỉ mang lại sự thuận tiện cho con người. Nó sẽ được tốt đẹp nếu những chuỗi có thể được đun sôi xuống số nguyên ID cho nhị phân thực thi cuối cùng, kể từ khi hồ bơi tài nguyên là bất biến tại thời điểm đó và CPU thực sự sẽ thích ID nguyên. .NET không hoạt động theo cách này, nhưng các nền tảng khác có thể.

+0

Trên thực tế, trong trường hợp của chúng tôi, các tài nguyên sẽ có thể thay đổi trong khi thực hiện ứng dụng. Localizers của chúng tôi (bên ngoài công ty) sẽ có thể sửa đổi các tài nguyên, ví dụ trong một cửa sổ hộp thoại, và có thể đóng và mở lại cửa sổ hộp thoại để xem các thay đổi của chúng. –

+0

Tài nguyên * nội dung * có thể thay đổi được bởi người dịch, nhưng tài nguyên * ID * không thể thay đổi được khi chúng đã được biên dịch thành bản có giá trị. Trong một kịch bản trình biên dịch tài nguyên, các tên chuỗi của các tài nguyên vẫn có thể được hiển thị cho các dịch giả mặc dù các chuỗi cồng kềnh đã bị giảm xuống các số nguyên biên dịch theo quy trình biên dịch exe. – dthorpe

+0

Tôi không chắc chắn tôi làm theo. Một checksum có được tạo ra trong mã và hệ thống tài nguyên tìm kiếm tài nguyên sẽ làm gì không? tra cứu tài nguyên? Tạo tổng kiểm tra bằng cách phân tích cú pháp tệp tài nguyên khi khởi chạy? –

0

Loại phân tách nội dung đó khỏi mã.Một tệp res dễ thay đổi hơn so với các tệp mã N chứa các tham chiếu được mã hóa cứng cho các hình ảnh. Có thể xem xét việc đặt các chuỗi đó trong đối tượng Cài đặt được [de] đăng trên tải/dỡ.

+0

Nội dung đã được tách ra khỏi mã trong các tệp tài nguyên. Các tệp này có thể được chỉnh sửa riêng trước hoặc trong khi thực thi mã. Những gì tôi đang tìm kiếm là bất kỳ tài liệu hỗ trợ nào quảng bá các định danh chuỗi trên các định danh tùy ý giới thiệu một tệp tài nguyên được lập chỉ mục. –

+0

Tôi xin lỗi vì tôi đã giải thích sai mẫu "a/b/c.png" dưới dạng tệp dữ liệu chứ không phải là tham chiếu đến tài nguyên. – Novikov

+0

Không sao cả. Tôi đang sử dụng mô hình đường dẫn tệp vì các nhà phát triển của chúng tôi sẽ hiểu nó và, nó thực sự chính xác (liên quan đến tệp tài nguyên có chứa). Các tệp tài nguyên sẽ là các tệp zip với các tệp tài nguyên được nhúng bên trong chúng. –

0

Nó chỉ đơn giản là thực tế hơn nhiều, các tên có thể tự tài liệu.

Resourcebundles thường được sử dụng trong các nỗ lực quốc tế hóa. Và có những công cụ quét các tệp nguồn, thay đổi tất cả các chuỗi để thực hiện các cuộc gọi để có được một tài nguyên giống như tên và tạo ánh xạ mặc định.

Trong mã, bạn vẫn có thể đọc nội dung đang được xuất trong ngôn ngữ mặc định.

Trong gói dịch, bạn ánh xạ ngôn ngữ mặc định cho ngôn ngữ được nhắm mục tiêu.

Điều này tạo điều kiện cho quá trình này đáng kể.

+0

Điều đó thật thú vị. Tôi có thể thấy nó hữu ích cho việc quản lý tài nguyên chuỗi và có thể làm cho nó trở thành một phần của hệ thống. Tuy nhiên, phản hồi này không thực sự giúp tôi ủng hộ đề xuất của tôi về việc truy cập tài nguyên abitrary bằng cách sử dụng một định danh chuỗi có ý nghĩa. –

+0

Đừng quên rằng thường là các biểu tượng, hình ảnh, clip âm thanh, v.v ... phải được quốc tế hóa. Sẽ rất khó sử dụng nhiều hệ thống ánh xạ. –

+0

Cảm ơn, tôi đã không quên họ. Tôi có kế hoạch truy cập chúng bằng tên. Dữ liệu được chứa trong tên được giới thiệu đó sẽ có thể được bản địa hóa. –

1
76 87 123 84 

vs

OpenWithNumericExample 
OfferStringsInComparison 
CommentOnGreaterReadabilityOfLatter 
PointOutGreatDebuggingAdvantageOfLatter 
Các vấn đề liên quan