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

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

例如,我的资源文件“HungryBear.png”存储在我的资源文件中。 Qt和我提出的系统可以通过psuedocode描述的方式获得它:

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是我提议的字符串ID。 似乎有很多好处,它们解决了我们在当前系统中遇到的许多问题。 我希望有支持文件说明所提议的系统是更好和更理想的,所以我的问题是:

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

笔记

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

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

  • 使用数字资源ID的主要缺点是可发现性(查明哪些资源是1234)以及在大型应用程序中随着时间的增加而保持ID的唯一性。

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

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


    76 87 123 84
    

    VS

    OpenWithNumericExample
    OfferStringsInComparison
    CommentOnGreaterReadabilityOfLatter
    PointOutGreatDebuggingAdvantageOfLatter
    

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

    链接地址: http://www.djcxy.com/p/2581.html

    上一篇: Why are string identifiers used to access resource data?

    下一篇: How do I express “not in” using lambdas?