Ich möchte eine Benutzerkonfiguration über eine Benutzerkonfigurationsdatei initialisieren. Der Pfad für die Datei kann aus der Registrierung gelesen werden. Die Datei befindet sich in einem Ordner mit dem Benutzernamen.Klassendesign/beste Methode zum Initialisieren einer Benutzerkonfigurationsdatei
Also muss ich die folgenden Funktionen:
- eine Zeichenfolge aus der Registry
- Aufbau der Pfad in die Konfigurationsdatei Lesen
- die Datei in ein Konfigurationsobjekt Lese
Jetzt gibt sind mehrere Ansätze, um damit umzugehen:
Zuerst brauche ich
- ein „Helfer“ -Klasse für den Dateipfad bekommen (wir es Geteilt nennen)
- ein „Container“ -Klasse für die Konfigurationsinformationen (lassen Sie uns Konfiguration nennen)
So, Shared hat eine Funktion/Eigenschaft wie UserConfigurationFile, die den Pfad zur Konfigurationsdatei zurückgibt.
, um den Pfad der Datei zu erhalten Ich habe eine Funktion InitializeUserConfigurationFile(), die im Konstruktor Shared genannt wird:
class Shared {
public Shared()
{
InitializeUserConfigurationFile();
}
void InitializeUserConfigurationFile()
{
//
// Reads username
//
//
// Reads path from Registry
//
//
// etc.
//
}
//
// etc.
//
}
Irgendwelche bessere Vorschläge?
Wenn ich möchte, dass meine Container wir verschiedene Optionen initialisieren:
- Ist es am besten, die Benutzerkonfiguration innerhalb des Konstruktors zu initialisieren?
Sth. wie:
class Container
{
Shared shared = new Shared();
public Container()
{
InitializeUserConfiguration();
}
void InitializeUserConfiguration()
{
LoadConfiguration(shared.UserConfigurationFile);
}
void LoadConfiguration(string filename)
{
//
// Initializes all parameters frome filename
//
}
}
- Oder durch zwei Schritte (durch eine eigene Methode LoadConfiguration())?
Sth. wie:
Shared shared = new Shared();
Container container = new Container();
container.LoadConfiguration(shared.UserConfigurationFile);
- oder im Konstruktor von Containern durch einen Dateinamen liefert?
Sth. wie:
Shared shared = new Shared();
Container container = new Container(shared.UserConfigurationFile);
oder alles in Container ..?
Es gibt so viele Möglichkeiten ...
Ich hoffe, dass jemand ein Best-approch weiß ...
Grüße,
Inno
Und was zu tun, wenn Sie eine bestimmte Anwendung haben, die diese Art der Konfiguration (mit eigenen Dateien) seit Jahren verwendet? – Inno
Wenn es funktioniert, nicht berühren. Aber Sie fragen nach dem besten Ansatz, ich schlage vor, Sie am besten Ansatz :) Im Allgemeinen, mit Standard-Klassen, müssen Sie weniger schreiben, verbringen weniger Zeit und machen weniger Fehler. Vielleicht müssen Sie also über das Konfigurations-Refactoring in einer der zukünftigen Versionen nachdenken. – arbiter
"Aber Sie fragen nach dem besten Ansatz, ich schlage vor, Sie am besten Ansatz :)" Ja, Sie haben;) Aber wenn Ihre Anwendung nicht Best-Ansatz, sondern "einige Ansatz" unterstützt, brauchen Sie den besten Ansatz, um diese "einige Ansatz "% -) – Inno