2010-09-03 7 views
7

Pracuję nad projektem, który zastąpi system zarządzania zasobami (QuickTime Resource Manager na komputerach Mac i Windows), który został uznany za przestarzały i korzystam z bieżącego modelu używanego przez Qt, w którym dane są pobierane z pliku zasobów za pomocą klucza ciągu .Dlaczego są używane identyfikatory ciągów do uzyskiwania dostępu do danych zasobów?

Na przykład mogę mieć obraz w moim pliku zasobów, "HungryBear.png" przechowywany w moim pliku zasobów. Qt, a mój proponowanego systemu, by dostać go w sposób przedstawiony przez psuedocode:

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

Oczywiste jest, co w tym momencie, że obraz jest i gdzie można je znaleźć.

W naszym obecnym systemie używamy cyfr. Problem z liczbami polega na tym, że trzeba wyłowić plik zasobów (może być ich wiele), aby dowiedzieć się, jaki jest obraz (lub zasób).

Przykładem tego:

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

Pierwsza metoda jest to, co widziałem w obecnych systemach, które mają dostęp do danych plików zasobów. Powiedziano mi, że używają go C# i Java, wiem, że robią to dla par klucz-wartość, itp.

Jednak mój rówieśnik wyraził zaniepokojenie zmianą obecnego systemu używania tych numerów ID dla ciąg znaków, które proponuję. Wydaje się, że jest wiele korzyści i rozwiązują wiele problemów, które mieliśmy z obecnym systemem. Chcę mieć pomocniczą dokumentację, że proponowany system jest lepszy i pożądany, więc moje pytanie brzmi następująco:

Czy znasz jakieś badania lub dyskusję, która pokazuje, że użycie identyfikatora ciągu (hierarchicznego) w kodzie jest lepsze niż użycie dowolna liczba?

UWAGI

  1. Planuję za pomocą pliku zip (nieskompresowany) ewentualnie zawierać pliki danych.
  2. Mamy środowisko aplikacji-wtyczki. Aplikacja i każda wtyczka mogą mieć własne pliki zasobów. Wtyczki mogą mieć dostęp do danych zasobów w pliku zasobów aplikacji.
  3. Oto niektóre wymagania, które zostały uznane i wierzę spełnione:

    • Software Developers powinien być w stanie jednoznacznie zidentyfikować zasobów.
    • Deweloperzy oprogramowania mogą wymieniać zasoby o znaczących nazwach.
    • Zasoby są powiązane z częściami aplikacji, które ich potrzebują.
    • Lokalizatorzy muszą mieć możliwość łatwej identyfikacji plików zasobów, które uległy zmianie.
    • Lokalizatorzy muszą mieć możliwość używania własnych narzędzi do modyfikowania plików zasobów.
    • Klienci powinni być powiadamiani, gdy funkcjonalność, której używają, opiera się na nieaktualnych połączeniach.
+0

Jaki język jest ten kod? – Powerlord

+0

Kod zostanie napisany w C++ dla Mac OS X i Windows XP/Vista/7. Planowałem zrobić plik z zasobami plik zip zawierający dane, które mogą być: 1) plikami obrazów, 2) lokalizowalnymi plikami tekstowymi, 3) plikami tekstowymi definicji dialogowych, 4) plikami dźwiękowymi, 5) innymi plikami zasobów . –

Odpowiedz

2

Głównymi wadami korzystania z numerycznych identyfikatorów zasobów są wykrywalność (ustalenie, czym jest zasób 1234) i zachowanie niepowtarzalności identyfikatorów, gdy dodajesz więcej w czasie w dużych aplikacjach.

Główną wadą używania nazw łańcuchów dla identyfikatorów zasobów jest to, że ciągi zajmują więcej pamięci w czasie wykonywania. Na przykład wzorzec .NET dla zasobów używa nazw łańcuchów, a te nazwy łańcuchów oznaczają znaczniki wzdłuż w pliku wykonywalnym w środowisku wykonawczym.

Nazwy ciągów są łatwe do zachowania w unikatowej i samodzielnej dokumentacji w dużych aplikacjach i latach zmian (przy użyciu hierarchicznych ścieżek, jak w przykładzie), ale korzyści są tylko dla ludzkiej wygody. Byłoby miło, gdyby te łańcuchy mogły zostać sprowadzone do liczb całkowitych dla końcowego pliku wykonywalnego, ponieważ pula zasobów jest w tym momencie niezmienna, a procesor faktycznie wolałby identyfikatory całkowite. .NET nie działa w ten sposób, ale inne platformy mogą.

+0

Właściwie w naszym przypadku zasoby będą zmienne podczas wykonywania aplikacji. Nasi lokalizatorzy (zewnętrzni do firmy) będą mogli modyfikować zasoby, na przykład w oknie dialogowym, i będą mogli zamknąć i ponownie otworzyć okno dialogowe, aby zobaczyć ich zmiany. –

+0

Treść * treści * może być zmieniana przez tłumaczy, ale identyfikatory * zasobów * nie są zmienne, gdy zostaną wkompilowane w możliwą do edycji. W scenariuszu kompilatora zasobów nazwy ciągów zasobów mogą być nadal pokazywane tłumaczom, nawet jeśli nieporęczne ciągi zostały zredukowane do liczb całkowitych podczas kompilacji przez proces kompilacji exe. – dthorpe

+0

Nie jestem pewien, czy podążam. Czy w kodzie zostałaby utworzona suma kontrolna, a system zasobów, który szuka zasobu, zrobiłby coś? wyszukać zasoby? Utwórz sumy kontrolne, parsując plik zasobów podczas uruchamiania? –

0

Tego rodzaju przerw oddzielenie treści od kodu.Plik res jest łatwiejszy do zmiany niż pliki kodu N, które zawierają zakodowane odniesienia do obrazów. Może warto rozważyć umieszczenie tych napisów w obiekcie Settings, który zostanie [serializowane] przy ładowaniu/zwalnianiu.

+0

Treść jest już oddzielona od kodu w plikach zasobów. Pliki te można edytować osobno przed lub w trakcie wykonywania kodu. To, czego szukam, to dowolny materiał pomocniczy, który promuje identyfikatory ciągów znaków przez arbitralne identyfikatory odwołujące się do zindeksowanego pliku zasobów. –

+0

Przykro mi, źle zinterpretowałem wzór "a/b/c.png" jako plik ścieżki zamiast odniesienia do zasobu. – Novikov

+0

Bez problemu. Korzystam z paradygmatu ścieżki pliku, ponieważ nasi programiści to zrozumieją i, faktycznie, jest on dokładny (w stosunku do pliku zawierającego plik). Pliki zasobów będą plikami zip z plikami zasobów osadzonymi w nich. –

0

Jest to po prostu o wiele bardziej praktyczne, nazwy mogą być samo dokumentowanie.

Zasoby zasobów są często wykorzystywane w działaniach na rzecz internacjonalizacji. Istnieją narzędzia, które skanują pliki źródłowe, zmieniają wszystkie łańcuchy na wywołania funkcji, aby uzyskać zasób o podobnych nazwach i generują domyślne mapowanie.

W kodzie wciąż można przeczytać, co jest wyprowadzane w domyślnej langauge.

W pakiecie tłumaczenia mapujesz domyślny język na docelowy język.

To znacznie ułatwia ten proces.

+0

To interesujące. Widzę, że jest to przydatne do zarządzania zasobami ciągowymi i może stać się częścią systemu. Jednak ta odpowiedź w rzeczywistości nie pomaga we wspieraniu mojej propozycji dostępu do zasobów abonamentowych za pomocą znaczącego identyfikatora łańcucha. –

+0

Nie zapominaj, że często ikony, zdjęcia, pliki dźwiękowe itp. Muszą być umiędzynarodowione. Używanie wielu systemów mapujących może być mylące. –

+0

Dzięki, nie zapomniałem ich. Planuję dostęp do nich po imieniu. Dane zawarte w tej określonej nazwie będą dostępne do zlokalizowania. –

1
76 87 123 84 

vs

OpenWithNumericExample 
OfferStringsInComparison 
CommentOnGreaterReadabilityOfLatter 
PointOutGreatDebuggingAdvantageOfLatter 
Powiązane problemy