2010-12-13 22 views
3

Ich arbeite derzeit an ASP.NET MVC-Anwendung. Ich plane, eine statische Klasse zu erstellen, in der ich beabsichtige, alle globalen Zeichenkettenkonstanten wie Sitzungsnamen zu halten.Globale Konstanten in separater Datei. Ist es eine gute Idee?

Der Grund, warum ich zögere, ist, weil es irgendwie Geruch ist, aber ich kenne keine bessere Alternative.

Bitte zeigen Sie mir das Licht, wie globale Konstanten zu definieren.

+0

Für was es wert ist, riecht es nicht schlecht zu mir. –

Antwort

4

vadim,

ich tun, genau so, wie Sie zu diesem Zweck eine statische Klasse vorzuschlagen und verwenden. Sie erhalten dann den Vorteil von stark typisierten Accessoren PLUS die Möglichkeit, Overrides (in Form von Methoden) hinzuzufügen, sollten Sie sie benötigen.

hier ist ein Ausschnitt:

public static class Config 
{ 
    private const string NotSet = "**VALUE NOT SET**"; 
    private const int pageSize = 5; 

    public static string CustomCache 
    { 
     get 
     { 
      return ConfigurationManager.AppSettings["CustomCache"] ?? NotSet; 
     } 
    } 

    public static int PageSize 
    { 
     get 
     { 
      // simple default - no setter 
      return pageSize; 
     } 
    } 
} 

typische Nutzung:

items = _repository.GetPaged(pageNumber, Config.PageSize) 

in der obigen Klasse sind einige Einstellungen '2. Generation' von den App-Einstellungen in der web.config aber mit starken genannt Eingeben der Klassen, um die Laufzeitfehlerprüfung usw. sicherzustellen. Andere sind rein statische Einstellungen, die in der Klasse definiert sind.

es ist die Flexibilität, all das oben genannte zu tun, was (meiner Meinung nach) diesem Ansatz sowohl Anziehungskraft als auch echte Stärke verleiht.

+0

Soweit ich sehe, ruft CustomCache Werte aus web.config ab und gibt, wenn keine Konfiguration vorhanden ist, den in der Klasse beschriebenen NotSet-Wert zurück. Darüber hinaus können hier die anderen Konstantenwerte zugewiesen und direkt als PageSize-Eigenschaft verwendet werden. All das stimmt? –

+0

richtig - Sie könnten natürlich öffentliche String-Konstanten zuweisen und profitieren von der starken Eingabe auf ihnen. Ich kann nicht glauben, dass diese Antwort von Almsot vor 5 Jahren stammt - wo ist alles gelaufen :) –

+0

:) Gut. Ich habe ein ähnliches Problem auf http://StackOverflow.com/Questions/30255539/using-constant-for-de-fining-property-format-in-mvc/30255752?noredirect=1#comment48615812_30255752 und soweit ich aus den Antworten sehe Ich bin mir nicht sicher, ob der obige Ansatz für meine Bedürfnisse geeignet ist, dh Laufzeit, Kompilierzeitstatus. Könnten Sie bitte meine Frage überprüfen? Auf der anderen Seite kann ich auch daran denken, readonly statt constant zu verwenden, wenn es für mich viel passender ist. Könnten Sie mir bitte erklären? (Sie können Ihren Code auf dieser Seite veröffentlichen). Vielen Dank... –

1

Eine andere Alternative wäre, eine Ressourcendatei (.resx) zu erstellen. Wenn dies konfigurierbare Werte sind, können sie in web.config oder in einer Datenbankkonfigurationstabelle angezeigt werden.

0

Sie können global.asax Datei für diesen Zweck verwenden - ich würde Accessoren für sie verwenden, z.

private static int var ; 

public static int VAR 
{ 
    get { return var ; } 
} 
+1

Ich sehe keinen großen Unterschied zwischen Konstanten in global.asax oder einer anderen Klasse setzen. Können Sie mir sagen, ob es einen Vorteil hat, Konstanten in global.asax zu setzen? – Vadim

+1

Wenn Sie Code oder XML schreiben, ** bitte ** markieren Sie diese Zeilen im Texteditor und klicken Sie auf die Schaltfläche "Code" (101 010) auf der Symbolleiste des Editors, um sie schön zu formatieren und zu markieren! –

0

Ob es MVC oder Web-Formulare ist, verwende ich eine Kombination von Datenbankeinträgen (für Site-Einstellungen, die von Armaturenbrett geändert werden kann) und web.config appSettings (für Site-Einstellungen, die alle nicht oft ändern oder , dh konstant).

+0

In meinem Fall erwarte ich nicht, dass der Wert der Konstanten überhaupt geändert wird. Ich sehe keinen großen Unterschied zwischen AppSettings oder einer separaten statischen Klasse. Lass es mich wissen, wenn ich etwas verpasse. – Vadim

Verwandte Themen