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

时间:2010-09-03 17:48:17

标签: java c# resources resource-id

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

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

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

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

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

这方面的一个例子:

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);

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

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

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

备注

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

76 87 123 84

VS

OpenWithNumericExample
OfferStringsInComparison
CommentOnGreaterReadabilityOfLatter
PointOutGreatDebuggingAdvantageOfLatter

答案 2 :(得分:0)

这种方式打破了内容与代码的分离。 res文件比包含对图像的硬编码引用的N个代码文件更容易更改。也许可以考虑将这些字符串放在一个在加载/卸载时[de]序列化的Settings对象中。

答案 3 :(得分:0)

它更加实用,名称可以自我记录。

Resourcebundles经常用于国际化工作。还有一些工具可以扫描源文件,将所有字符串更改为函数调用以获取类似名称的资源并生成默认映射。

在代码中,您仍然可以读取默认语言中输出的内容。

在翻译包中,您将默认语言映射到目标语言。

这大大方便了这个过程。