Verwendung von Konstanten vs. Konfigurationsdateien zur Verwaltung der Konfiguration

20

Ich kämpfe oft mit mir selbst darüber, ob ich bestimmte Schlüssel in meine web.config oder in eine Constants.cs-Klasse oder so etwas stecken soll.

Zum Beispiel, wenn ich anwendungsspezifische Schlüssel für jeden Fall speichern möchte. Ich könnte sie speichern und über benutzerdefinierte Schlüssel aus meiner Webkonfiguration abrufen oder sie verbrauchen, indem ich auf eine Konstante in meiner Konstantenklasse verweise.

Wann möchten Sie Konstanten anstelle von Konfigurationsschlüsseln verwenden?

Diese Frage trifft wirklich auf jede Sprache zu, die ich denke.

WeDoTDD.com
quelle

Antworten:

20

Persönlich würde ich nur Konstanten als Standardwerte verwenden und sie durch Werte aus einer Konfigurationsdatei überschreiben lassen.

Wenn die Anwendung Befehlszeilenargumente akzeptiert, überschreiben diese wiederum die Parameter der Konfigurationsdatei.

Ein Programmierer-Typ
quelle
3

Der Wert in der Konfigurationsdatei ist schwerer zu pflegen als der Wert in der Konstantenklasse, da der Compiler nicht prüft, ob er existiert und vom richtigen Typ ist, die IDE normalerweise keine Codeunterstützung bietet und weil es sich um eine weitere Syntax handelt, zu der Sie wechseln müssen während der Programmierung.

Daher würde ich vorschlagen, Folgendes zu setzen:

  • Werte, die in allen Installationen mit den Konstanten im Code identisch sind. Es hat einige Vorteile, sie in eine Konstantenklasse zu setzen (Sie können verschiedene Werte einfach ausprobieren, um zu sehen, wie sie funktionieren) und sie in das Modul zu setzen, das sie verwendet (Sie müssen keine weitere Datei öffnen, wenn Sie dieses Modul und ändern Vermeiden einer Datei, die jeder bearbeiten würde, was zu Konflikten bei der Versionskontrolle führen würde).
  • Werte, die (möglicherweise) pro Installation in die Konfigurationsdatei geändert werden müssen. Und wahrscheinlich möchten Sie den Code trotzdem als Standard festlegen. Wenn der Wert in der Konfiguration nicht festgelegt ist, funktioniert die Anwendung trotzdem (irgendwie).
Jan Hudec
quelle
Was meinst du richtigen Typ ... Konfigurationsschlüssel ... es ist XML ...
WeDoTDD.com
@CoffeeAddict: Richtiger Typ bedeutet, dass wenn Sie eine Option haben, für die eine Zahl erforderlich ist, und Ihre Konfigurationsdatei eine nicht numerische Zeichenfolge enthält, Sie diese erst zur Laufzeit finden. Und "Konfigurationsschlüssel" ist alles, was Sie zum Abrufen des Werts aus der Konfigurationsdatei verwenden, im Falle von XML der Elementpfad. Ok, Sie können ein Schema und eine entsprechende Klasse haben (es gibt ein xsdTool, um eine aus der anderen zu generieren) und die Konfiguration mit XMLSerializer(die sinnvollste Methode, um XML in C # zu verarbeiten) verwenden, damit Sie im Voraus validieren können, aber es ist immer noch eine zusätzliche Arbeit.
Jan Hudec
Nicht einverstanden: "Der Wert in der Konfigurationsdatei ist schwerer zu pflegen als der Wert in der Konstantenklasse" - hängt davon ab, wie Sie Ihre Konfiguration codiert haben und wie viele dieser konfigurierbaren Elemente Sie haben: Wiederholen Sie sich nicht!
Ingenieur
3

Das Ändern von Konstanten erfordert in den meisten Fällen die Neuerstellung der Anwendung. Anders ausgedrückt, Konstanten bleiben Konstanten, wenn jemand keinen Zugriff auf Code hat.

Daher sollten alle Informationen, die der Endbenutzer bereitstellen (und ändern muss), in die Konfigurationsdateien aufgenommen werden. Die meisten anderen müssen unter Konstanten gehen. Es muss jedoch legitime Standardeinstellungen oder Fehlerausnahmebehandlung geben, wenn die Konfigurationsdateien beschädigt sind.

Elemente, die nicht Teil der Abstraktion des Objekts sind (dh, wenn Konstanten, die nicht von externen (aufrufenden) Objekten geändert werden sollen, ausgeblendet werden und im Wesentlichen bedeuten, dass sie als private Konstanten besser geeignet sind als Konfigurationsdateien).

Wenn es viele Konfigurationselemente gibt, die sich auf verschiedene Objekte beziehen, die nicht miteinander verwandt sind, und wenn so viele Objekte (gleiche oder eigene) Konfigurationsdateien abrufen müssen, besteht die Möglichkeit, dass diese Dinge Konstanten gewesen sein sollten.

Dipan Mehta
quelle
1

Eine einfache Faustregel besteht darin, Konstanten zu erstellen, wenn Sie wissen, dass Sie mit einem festen Satz von Werten arbeiten, von denen Sie wissen, dass sie auf einen bestimmten Kontext angewendet werden können, ohne dass Änderungen erforderlich sind. Stellen Sie externe Konfigurationen für alles andere bereit.

Ein gutes Beispiel für Konstanten wäre, wenn alle Formen, mit denen Sie gearbeitet haben, entweder SQUAREoder sein könnten ROUND. In den meisten Sprachen können Sie die Tatsache nutzen, dass sich dieser Wert im Laufe der Zeit nicht ändert, indem Sie ihn nur einmal zuweisen und den Zugriff optimieren.

Externe Konfigurationen sind erforderlich, wenn Sie den Wert dynamisch abrufen müssen, da Sie den Wert, mit dem Sie arbeiten, nicht im Voraus annehmen können. Dies bedeutet jedoch nicht, dass Sie Leistungskompromisse eingehen müssen: Für Konfigurationswerte, die Sie erwarten Wenn Sie dies richtig machen, zahlen Sie nur den Preis für das einmalige Abrufen und erhalten trotzdem alle Vorteile.

Filip Dupanović
quelle
0

Eine Konstante ist per Definition ein Speicherort für einen Wert, der sich nicht ändern sollte (z. B. PI).

Ich nehme an, Sie meinten "Parameter" und keine Konstante

Beachten Sie außerdem, dass das Offenlegen von Variablen für Benutzereingaben aus der Konfigurationsdatei der Anwendung schaden kann.

Wenn möglich, machen Sie keine Werte in der Konfigurationsdatei verfügbar, ohne sie im Code zu validieren, um eine Überprüfung der Integrität durchzuführen. Außerdem schlage ich vor, dass Sie keine Geschäftsregelparameter (wie z. B. maximales Gehalt usw.) in Konfigurationsdateien platzieren und für diese auch keine Konstanten verwenden. Solche Werte sollten in einer Datenbank mit den entsprechenden Tabellendefinitionen gespeichert werden, damit beim Ändern eine gewisse Sicherheit erzwungen wird und Sie automatisch Versionen der Datenwerte erstellen können (mithilfe von gespeicherten Prozessen oder Datenbankprotokollen). Dies hängt natürlich davon ab, wie sensibel Ihre Anwendung ist.

Wenn Sie jemals Konfigurationsdateien zum Speichern von Daten verwenden, stellen Sie sicher, dass Sie diese versionieren.

Keine Chance
quelle