7

我正在开发一个项目来替换已弃用的资源管理系统(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. 以下是一些已经考虑过并且我认为已经满足的要求:

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

4 回答 4

2

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

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

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

于 2010-09-03T17:59:43.627 回答
1
76 87 123 84

对比

OpenWithNumericExample
OfferStringsInComparison
CommentOnGreaterReadabilityOfLatter
PointOutGreatDebuggingAdvantageOfLatter
于 2010-09-03T18:10:51.243 回答
0

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

于 2010-09-03T17:52:34.507 回答
0

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

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

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

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

这极大地促进了这一过程。

于 2010-09-03T17:55:13.920 回答