Wo zum speichern von Anwendungseinstellungen?

Kürzlich habe ich entdeckt, dass die "Web.Config" - Datei enthält eine <appSettings> Abschnitt, was wohl gut für die Speicherung einer Anwendung Einstellungen. Was solls, es hat sogar eine programmgesteuerte Möglichkeit, um den Zugriff auf die Datei durch ein standard-System-Bibliothek. So ganz clever, schrieb ich eine Schnittstelle darauf zugreifen und dann eine Konkrete Implementierung der Schnittstelle, hier gezeigt:

public interface IAppSettings
{
    IEnumerable<string> GetValues(string componentName, string settingName);
    IEnumerable<KeyValuePair<string, string>> GetValuePairs(string componentName, string settingName);
    void SetValues(string componentName, string settingName, IEnumerable<string> valueList, bool append);
    void SetValuePairs(string componentName, string settingName, IEnumerable<KeyValuePair<string, string>> pairList, bool append);
}

Dann kam ich zu entdecken, dass speichern Einstellungen zurück zu "web -.config", während die Anwendung ausgeführt wird, bewirkt, dass die gesamte Anwendung neu zu starten. Dies scheint völlig unvernünftig für mich, weil wenn ich Schreibe wieder zu web.config eine Menge und die Anwendung neu gestartet wird jedes mal, wenn, dann Dinge wie HttpRuntime.Cache vollständig geleert effektiv machen mein Cache nutzlos, weil es ständig entleeren und sich vermehren.

So Frage ich mich: Wo Lagere ich meine Programmeinstellungen?

Ist es eine gute Lösung gibt für diese, so dass ich nicht roll meine eigenen?

EDIT:

Okay, vielen Dank an alle, vorgeschlagen, mit einem DB-und einem potentiellen Tabelle schema. Ich denke, ich werde gehen, mit dem folgenden schema:

settings:
    index NUMBER NOT NULL AUTO_INCREMENT   <== Primary Key
    component NVARCHAR(255) NOT NULL
    setting NVARCHAR(255) NOT NULL
    key   NVARCHAR(255)
    value NVARCHAR(255) NOT NULL

Obwohl ich nicht denke, das werde ich machen "Einstellung" die P-Taste, aber verwenden Sie eine Auto-Incr Index statt. Auf diese Weise, wenn ich eine Anwendung haben, muss mail etwas, um mehrere Manager, ich kann speichern Sie viele:

index     component       setting        value
1         RequestModule   ManagerEmail   manager1@someplace
2         RequestModule   ManagerEmail   manager2@someplace

Und dann kann ich verwenden:

IEnumerable<string> GetValues(string componentName, string settingName);

Und es gibt eine Liste von E-Mail-Adressen, anstatt nur einen einzelnen Wert.

Macht das Sinn?

  • Mit DB speichert applciation Einstellungen ist OK, aber bitte speichern Sie die Einstellungen im Cache. Einstellungen im web-config sind schnell zu Lesen, da Sie im server-memery. Wenn Sie ständig Lesen Sie die Einstellungen in evvery Seite hinzufügen-Zwischenspeichern, um Ihre Einstellungen und auch entfernen Sie den cache, wenn die Einstellungen aktualisiert werden.
  • nach Ihrer Bearbeiten, bearbeitete ich meine Antwort. Beachten Sie, dass, wenn Sie zwei Fragen haben, bitten Sie Sie separat, anstelle der Zugabe der zweiten Frage zu dem vorhergehenden.
InformationsquelleAutor Pretzel | 2010-10-20
Schreibe einen Kommentar