.Net - Strategien zur Vermeidung von Magic String

8

In Code bei der Arbeit haben wir viele Verwendungen von magischen Zeichenfolgen wie das folgende Code-Snippet:

%Vor%

Es gibt also viele Stellen, an denen wir einen String als Parameter übergeben, um zu sehen, ob der Benutzer ein bestimmtes Recht hat. Ich mag das nicht, weil das viele magische Saiten erzeugt.

Was wäre ein besserer Weg, es zu tun?

Enum, Konstante, Klasse?

    
Melursus 08.07.2010, 15:57
quelle

6 Antworten

17

Verwenden Sie in diesem speziellen Fall eine Enum. Es wird keine magischen Zeichenfolgen geben und wenn sich die Enum ändert (auf eine Weise, die die magische Zeichenfolgenlösung durchbricht), wird die App nicht mehr kompiliert.

%Vor%

Dann können Sie einfach haben:

%Vor%

Sie könnten auch eine Klasse verwenden, aber dann beschränken Sie sich auf komplexere Szenarien. Zum Beispiel eine einfache Änderung der Enumeration zu etwas wie:

%Vor%

Wäre es möglich, bitweise Operatoren für komplexere Berechtigungen zu verwenden (z. B. wenn ein Benutzer entweder Erstellen oder Löschen benötigt):

%Vor%     
Justin Niessner 08.07.2010, 15:59
quelle
5

Dies ist auch im .NET-Framework üblich. Beispiele sind System.Windows.DataFormats und System.Net.WebRequestMethods.Http. Sie würden die readonly Variante wünschen:

%Vor%     
Hans Passant 08.07.2010 16:21
quelle
3

Erweiterungsmethoden! Halte sie am selben Ort, um alle magischen Zeichenfolgen zu verfolgen.

%Vor%

Dann können Sie:

%Vor%     
jgauffin 08.07.2010 16:39
quelle
1

Erstellen Sie eine Klasse, die diese Eigenschaften stark typisiert, wie

%Vor%

Dadurch werden Ihre "magischen Zeichenfolgen" an einer Stelle in Ihrem Code gespeichert. Ein enum wird auch funktionieren, ist aber meiner Meinung nach nicht so gut lesbar.

Hinweis: Mein Beispiel soll als Property-Proxy für den angemeldeten Benutzer dienen, also die statische Klasse. Wenn Sie etwas wünschen, das mit direkteren Daten (z. B. einer Liste von Benutzern) arbeiten würde, müsste diese Art von Klasse nicht statisch sein und auf Benutzerkontenbasis instanziiert werden.

    
David Lively 08.07.2010 16:25
quelle
0

Sie können in C # konstante Zeichenfolgen verwenden.

Sie könnten alle Zeichenfolgen in einer Kopfzeile wie folgt definieren:

%Vor%

Nicht sicher, ob dies der "beste" Weg ist, aber es ist sicherlich besser, als magische Werte im Code zu haben.

    
Avalanchis 08.07.2010 16:02
quelle
0

Ich unterbreche den Weg von "Justin Niessner". Aber in einigen Fällen würde ich lieber das folgende Code-Konstrukt schreiben.

%Vor%

und Sie können es als

konsumieren %Vor%     
crypted 08.07.2010 16:34
quelle

Tags und Links