2010-03-31 9 views
12

Ich verwende C# .NET.Die beste Möglichkeit, um Softwareeinstellungen vorzunehmen?

In meiner Software stelle ich Einstellungsdialog zur Verfügung, durch den Benutzer die Anwendungseinstellungen festlegen kann, die ich in einer Datei speichern möchte.

Anforderungen (typisch):

  1. Jede Klasse ich einen Teil dieser Einstellungen definiert verwendet. Also sollten diese für alle Klassen global sein.
  2. Diese sollten beim Starten der Software geladen werden.
  3. Wenn Benutzer Einstellungen ändert und auf "Speichern"/"Anwenden" klickt. Die aktuellen Einstellungen sollten sich ändern.

Ich frage mich, was ist der beste Weg, dies zu tun? Wie können diese Einstellungen am besten auf der Festplatte gespeichert werden? Ich meine, sollte ich ein Settings Klassenobjekt erstellen und es zu "settings.dat" serialisieren oder eine strukturierte Datei wie XML/JSON bereitstellen

Dies ist für fast jede andere Software erforderlich. Also, gibt es kein Designmuster dafür?

EDIT:

Nun, das ist etwas, das ich nicht kannte. Es ist schön :). Aber sagen Sie, während Benutzer die Software in der Mitte verwendet, ändert er die Einstellungen und alle anderen Objekte, die diese globalen Properties.Settings.Default. * Verwenden, sollten geändert werden. Gibt es irgendeine Art von Benachrichtigungsmechanismus? Irgendeine Art von Veranstaltung?

Antwort

7

Die Settings-Klasse, die mit .Net kommt, ist sehr praktisch, und ich verwende es für die meisten meiner Projekte. Man muss darauf achten, dass jede neue Version der Anwendung eine eigene Einstellungsdatei erhält. Stellen Sie also sicher, dass Sie über sinnvolle Standardeinstellungen verfügen. Alle Einstellungen werden verschwinden, wenn eine neue EXE verteilt wird.

Der globale Zustand ist sehr schwer zu handhaben, daher übertrage ich normalerweise die entsprechenden Einstellungen an die verschiedenen Objekte in ihren Konstruktoren oder Eigenschaften. Normalerweise verwende ich für diese Objekte keine Einstellungsänderungen, da es in vielen Fällen sehr schwierig für ein Objekt ist, sich intelligent mit einer sich ändernden Einstellung zu befassen. Stattdessen verwende ich einfach die neuen Einstellungen für die neuen Objekte, wenn sie erstellt werden. Wenn eine Einstellung sofort angewendet werden muss, lasse ich einfach das alte Objekt ab und erstelle ein neues. Es hängt nur von den Details der Anwendung ab.

Wenn Sie auf Ihrem Einstellungsbildschirm eine Schaltfläche Übernehmen haben, würde ich empfehlen, alle Werte nach dem Speichern neu zu laden und anzuzeigen. Auf diese Weise enthält das Display genau das, was tatsächlich gespeichert wurde. Dies kann wichtig sein, wenn Einstellungen geparst werden. Ich habe Benutzer eine Kombination aus Monat und Tag in ein bestimmtes Feld eingeben lassen, und das verwendete Format weicht von dem ab, was erwartet wurde, daher war der gespeicherte Wert inkorrekt. Durch Aktualisieren des Bildschirms nach dem Übernehmen können diese Arten von Fehlern offensichtlich gemacht werden.

Ich hoffe, das hilft!

+1

Sie können Verwenden Sie die Upgrade-Methode (http://msdn.microsoft.com/en-us/library/system.configuration.applicationsettingsbase.upgrade.aspx), um die Einstellungen von der vorherigen Version in die neuere Version zu verschieben. Stellen Sie nur sicher, dass Sie es nur einmal anrufen. – Giorgi

+0

@Giorgi - Interessant! Ich werde es versuchen müssen. –

+0

Fügen Sie diesen Link http://msdn.microsoft.com/en-us/library/aa730869%28VS.80%29.aspx zu Ihrer Antwort hinzu und bearbeiten Sie auch Ihre Antwort gemäß Giorgis Kommentar. Damit ich es als Antwort akzeptieren kann. – claws

13

.Net-Projekte haben bereits die Vorstellung von Einstellungen, die entweder auf den Benutzer oder die Anwendung beschränkt sind und alle Ihre oben genannten Anforderungen erfüllen. Es gibt Klassen zum Lesen und Schreiben der Einstellungen. Ich würde Ihnen wärmstens empfehlen, sich diese anzusehen, anstatt selbst etwas aufzurollen.

Using Settings in C#

Sie können Einstellungen in einer Vielzahl von Projekttypen verwenden, obwohl in bestimmten Arten von Projekten wie ASP.Net Projekte, auf Benutzerebene Einstellungen möglicherweise nicht verfügbar.

+1

@womp, die Aktualisierung zwischen verschiedenen Versionen kann ziemlich schwierig werden. – Giorgi

+0

Sicher - Versionierung im Allgemeinen ist schwierig, und das ist nur ein weiterer Fall davon. Dies sollte dem OP jedoch im Allgemeinen viel Zeit ersparen. – womp

+0

Wo sind diese Einstellungen gespeichert? in der Versammlung dieses Projekts (dll/exe)? oder wird es in irgendeiner Art von Settings-Dateien gespeichert, die ich zusammen mit meiner Software bereitstellen sollte. – claws

3

Sie und womp sind beide Recht:

Sie sollten eine Settings-Klasse erstellen, die eine Fassade über die .NET-Einstellungen ist. Auf diese Weise erhalten Sie das Beste aus beiden Welten: die Testbarkeit einer handgerollten Lösung und die einfache Implementierung, die normalerweise mit Microsoft Silver Bullets verbunden ist.

0

Ich persönlich würde die Route Properties.Settings gehen. Fügen Sie dem Eigenschaftsordner Ihrer App eine Einstellungsdatei hinzu. So können Sie auf einfache Weise Elemente zur Datei app.config Ihrer Anwendung hinzufügen. Es gibt eine eingebaute .net-Klasse, mit der Sie Werte in der Einstellungsdatei lesen/schreiben können. Sie können dann eine kleine Wrapperklasse schreiben, die diese Funktionalität kapselt, oder einfach die eingebaute .net-Klasse überall verwenden.

Ich persönlich würde eine threadsafe Singleton-Klasse erstellen, die die kleine Wrapper-Klasse über die integrierte .net One verwendet. Ja, es ist etwas zusätzliche Arbeit, aber es ist eine kleine Menge und gibt Ihnen einige große Kraft in Ihrer App für das kleine Stück Arbeit.

Bearbeiten: Sorry vergessen, den Link MSDN-Einstellungen aufzunehmen.

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

0

Wie andere haben vorgeschlagen, um die Einstellungen-Funktion ist der Weg zu gehen. Einstellungen stellen auch Ereignisse bereit, wenn sie aktualisiert werden, sodass Sie mit ihnen umgehen und die erforderlichen Maßnahmen ergreifen können. Sie können auch die Methode Upgrade verwenden, um die Einstellungen von der vorherigen Version in die neuere Version zu verschieben. Stellen Sie nur sicher, dass Sie es nur einmal aufrufen (wahrscheinlich vom Installer).

Einstellungen können auch an die Steuerelemente gebunden werden, so dass Sie sie nicht manuell von Steuerelementen zu Einstellungen zuordnen müssen.

Verwandte Themen