Почему строковые идентификаторы используются для доступа к данным ресурса? - PullRequest
7 голосов
/ 03 сентября 2010

Я работаю над проектом по замене системы управления ресурсами (QuickTime Resource Manager на Mac и Windows), которая устарела, и я использую текущую модель, которую использует 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 используют его, я знаю, что они используют для пар ключ-значение строки и т. Д.

Однако мой коллега выразил обеспокоенность по поводу изменения текущей системы использования этих числовых идентификаторов для идентификаторов строк, которые я предлагаю. Кажется, что есть много преимуществ, и они решают многие проблемы, которые у нас были с текущей системой. Я хочу иметь подтверждающую документацию о том, что предлагаемая система лучше и желательнее, поэтому мой вопрос такой:

Известны ли вам какие-либо исследования или обсуждения, которые демонстрируют, что использование строкового идентификатора (иерархического) в коде лучше, чем использование произвольного числа?

ПРИМЕЧАНИЯ

  1. Я планирую использовать zip-файл (возможно, несжатый) для хранения файлов данных.
  2. У нас есть среда приложения-плагина. Приложение и каждый плагин могут иметь свои собственные файлы ресурсов. Плагины могут иметь доступ к данным ресурсов в файле ресурсов приложения.
  3. Вот некоторые требования, которые были рассмотрены, и я считаю, что они выполнены:

    • Разработчики программного обеспечения должны иметь возможность однозначно идентифицировать ресурсы.
    • Разработчики программного обеспечения должны иметь возможность называть ресурсы значимыми именами.
    • Ресурсы должны быть связаны с теми частями приложения, которые в них нуждаются.
    • Локализаторы должны иметь возможность легко идентифицировать файлы ресурсов, которые изменились.
    • Локализаторы должны иметь возможность использовать свои собственные инструменты для изменения файлов ресурсов.
    • Клиенты должны быть предупреждены в случае, если используемые ими функции зависят от устаревших вызовов.

Ответы [ 4 ]

2 голосов
/ 03 сентября 2010

Основными недостатками использования числовых идентификаторов ресурсов являются обнаруживаемость (выяснение, что такое ресурс 1234) и поддержание уникальности идентификаторов по мере того, как вы добавляете больше со временем в больших приложениях.

Основной недостаток использования имен строкДля идентификаторов ресурсов строки занимают больше памяти во время выполнения.Например, шаблон .NET для ресурсов использует имена строк, и эти имена строк помечаются в исполняемом файле во время выполнения.

Строковые имена легко сохранять уникальными и самодокументируемыми в больших приложениях и в течение многих лет редакций (используя иерархические пути, как в вашем примере), но выгода действительно только для удобства человека.Было бы неплохо, если бы эти строки можно было сводить к целочисленным идентификаторам для конечного исполняемого двоичного файла, поскольку в этот момент пул ресурсов является неизменным, а ЦП фактически предпочитает целочисленные идентификаторы..NET не работает таким образом, но другие платформы могут.

1 голос
/ 03 сентября 2010
76 87 123 84

против

OpenWithNumericExample
OfferStringsInComparison
CommentOnGreaterReadabilityOfLatter
PointOutGreatDebuggingAdvantageOfLatter
0 голосов
/ 03 сентября 2010

Это гораздо более практично, имена могут быть самодокументированы.

Ресурсные пакеты часто используются в усилиях по интернационализации.И есть инструменты, которые сканируют исходные файлы, изменяют все строки на вызовы функций, чтобы получить ресурс с одинаковым именем и генерируют отображение по умолчанию.

В коде вы все еще можете прочитать то, что выводится в языке по умолчанию.

В пакете перевода вы сопоставляете язык по умолчанию с целевым языком.

Это значительно облегчает этот процесс.

0 голосов
/ 03 сентября 2010

Это нарушает разделение контента от кода. Файл res легче изменить, чем N кодовых файлов, которые содержат жестко закодированные ссылки на изображения. Возможно, стоит рассмотреть возможность помещения этих строк в объект «Настройки», который сериализуется при загрузке / выгрузке.

...