7

廃止されたリソース管理システム (Mac および Windows では QuickTime Resource Manager) を置き換えるプロジェクトに取り組んでおり、文字列キーを使用してリソース ファイルからデータを取得する 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 に文字列名を使用する主な欠点は、実行時に文字列がより多くのメモリを消費することです。たとえば、リソースの .NET パターンは文字列名を使用し、これらの文字列名は実行時に実行可能ファイル内でタグ付けされます。

文字列名は、大規模なアプリケーションや何年にもわたるリビジョン(例のように階層パスを使用)にわたって一意で自己文書化するのは簡単ですが、その利点は実際には人間の便宜のためだけです。その時点でリソース プールは不変であり、CPU は実際には整数 ID を好むため、これらの文字列を最終的な実行可能バイナリの整数 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 に答える