为什么字符串标识符用于访问资源数据?

Lyn*_*son 7 c# java resources resource-id

我正在开发一个项目来替换已弃用的资源管理系统(Mac和Windows上的QuickTime资源管理器),并且我一直在使用Qt使用的当前模型,其中使用字符串键从资源文件中检索数据.

例如,我的资源文件中可能有一个图像,"HungryBear.png"存储在我的资源文件中.Qt和我提出的系统将以伪代码描述的方式得到它:

image = GetImageResource("BearPlugin/Images/HungryBear.png");
Run Code Online (Sandbox Code Playgroud)

在那一点上很清楚那个图像是什么,以及它可以在哪里找到.

在我们当前的系统中,我们使用数字.数字的问题在于,必须找到资源文件(可能有很多)来找出它是什么图像(或资源).

一个例子:

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);
Run Code Online (Sandbox Code Playgroud)

第一种方法是我在访问资源文件数据的当前系统中看到的.我被告知C#和Java使用它,我知道它们用于字符串键值对等.

然而,我的同行已经表示担心改变当前使用这些数字ID的系统,我正在提议的字符串id.似乎有很多好处,它们解决了我们在当前系统中遇到的许多问题.我希望得到支持文档,建议的系统更好,更可取,所以我的问题是:

您是否知道任何研究或讨论证明在代码中使用字符串标识符(分层)比使用任意数字更好?

笔记

  1. 我打算使用zip文件(可能是未压缩的)来包含数据文件.
  2. 我们有一个应用程序插件环境.应用程序和每个插件都可以拥有自己的资源文件.插件可能能够访问应用程序资源文件中的资源数据.
  3. 以下是一些已经考虑过的要求,我相信这些要求:

    • 软件开发人员应能够唯一地识别资源.
    • 软件开发人员应能够使用有意义的名称来命名资源.
    • 资源应与需要它们的应用程序部分相关联.
    • 本地化人员应能够轻松识别已更改的资源文件.
    • 本地化人员应能够使用自己的工具来修改资源文件.
    • 如果客户使用的功能依赖于已弃用的呼叫,则应通知客户.

dth*_*rpe 2

使用数字资源 ID 的主要缺点是可发现性(弄清楚资源 1234 是什么)以及在大型应用程序中随着时间的推移添加更多 ID 时保持 ID 的唯一性。

使用字符串名称作为资源 ID 的主要缺点是字符串在运行时占用更多内存。例如,资源的 .NET 模式使用字符串名称,并且这些字符串名称在运行时标记在可执行文件中。

字符串名称很容易在大型应用程序和多年的修订中保持唯一和自我记录(使用您的示例中的分层路径),但好处实际上只是为了人类的方便。如果这些字符串可以归结为最终可执行二进制文件的整数 ID,那就太好了,因为此时资源池是不可变的,并且 CPU 实际上更喜欢整数 ID。.NET 不能以这种方式工作,但其他平台可以。