2017-11-08 5 views
-1

Wir haben ein System, das generische physische Ressourcen verwaltet. Es gibt über 500 individuelle Ressourcen. Das System wird für viele verschiedene Dinge verwendet und um die Software einfacher zu schreiben, verwenden wir Aliase.Eine bessere Alias-Liste?

Zum Beispiel erhält eine physische Ressource TG67I9 einen Alias ​​von "RightDoor". Wenn Code geschrieben wird, wird anstelle von TG67I9 RightDoor verwendet, um den Code lesbarer zu machen. Diese Alias-Liste wird als Textdatei mit Verweisen auf Ressourcen und ihre Aliase geladen. Dieses System verwendet buchstäblich Hunderte von verschiedenen Alias-Listen, um dieselben physischen Ressourcen zu referenzieren.

Diese Art von Setup hat zwei wesentliche Mängel. Erstens, wenn Ressourcen mit ihren Aliasnamen aufgerufen werden, werden sie als Strings übergeben. Door.Open ("RightDoor") zum Beispiel. Dies führt nicht zu irgendwelchen Tooltips oder Smart, was den Code schwieriger zu schreiben macht. Es erfordert grundsätzlich ständig auf die Alias-Liste verweisen. Ist es RightDoor oder Right_Door oder rechts oder ... Sie bekommen die Idee. Die zweite besteht darin, dass es keine Validierung der Parameter bis zur Ausführung gibt. Der Compiler weiß, dass eine Zeichenfolge übergeben wird und dann ist es glücklich. Nur wenn der Code ausgeführt wird, versucht die Funktion, über ihr Alias ​​auf die Ressource zuzugreifen, und schlägt fehl, weil sie die rechte Tür nicht finden kann, weil sie RightDoor sein soll. Ein Fehler wird angezeigt. Dies erfordert langwieriges Debuggen und Ausführen des Codes, um alle schlechten Aliase auszusortieren.

Gibt es einen besseren Weg, dies zu tun? So dass eine Alias-Liste mit einem Querverweis von physischen Ressourcen zu ihren Alias-Namen erstellt werden kann und nachdem die Liste erstellt wurde, dass Tooltips erscheinen könnten, die Ressourcen vorschlagen. (Angenommen, ein neues System könnte von Grund auf neu geschrieben werden)

Ich verwende das neueste .NET mit VisualStudio 2017 und C#, um den Code zu schreiben.

+0

Muss diese Alias-Liste zur Laufzeit geladen werden? Wenn nicht, könnten Sie eine Enum-Definition aus der Liste zur oder vor der Kompilierzeit generieren. – Blorgbeard

+0

Sie könnten 2 Aufzählungen erstellen, die sich gegenseitig zuordnen und einfach zwischen den beiden umwandeln? Ich weiß nicht genug über Ihre Situation, um zu wissen, ob das wirklich ein guter Vorschlag ist. –

+0

Mit T4 können Sie Code generieren. f.i. Generiere für jeden Alias ​​aus der Textdatei eine Eigenschaft und du kannst RightDoor.Open() verwenden –

Antwort

1

Der einfachste Ansatz ist höchstwahrscheinlich ein "string enum":

public class Resources { 
    public const string 
     LeftDoor = "TG67I8", 
     RightDoor = "TG67I9"; 
} 

Beispiel Verwendung:

Door.Open(Resources.RightDoor); 

Bewegen der Maus über .RightDoor in VS zeigt einen Tooltip (constant) string Resources.RightDoor = "TG67I9"
Rechtsklick auf .RightDoor und Wenn Sie Alle Referenzen suchen auswählen, wird angezeigt, wo die Variable verwendet wird.


Eine weitere Möglichkeit, die Zeichenfolge in dem Abschnitt Ressource des Projekteigenschaft werden kann hinzufügen, und dann:

using YourProjectNameSpace.Properties; 
... 
Door.Open(Resources.RightDoor); 

Das ist ein wenig langsamer ist, da die Ressource (n) zum Laufe abgerufen werden Zeit, aber ermöglicht es, die Ressourcen von einer benutzerdefinierten externen Datei getrennt von der ausführbaren Datei zu laden.

+0

VB.Net Version https://stackoverflow.com/questions/12312325/define-string-enum-in-vb-net/16200092#16200092 – Slai

+0

Mit einer T4-Vorlage können Sie die Ressource-Klasse aus der Alias-Textdatei generieren –

1

Verwenden Sie eine statische Klasse mit Konstanten. Ich habe das selbe oft gemacht und tue es immer noch. Plus .NET does this as well.

public static class PhysicalResources 
{ 
    public const string One = "Uno"; 
    public const string Two = "Deux"; 
    // ... 
} 
Verwandte Themen