Settings in der kompletten Solution verwalten

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von fichz.

    Settings in der kompletten Solution verwalten

    yo Leute,

    hätte eine Frage zu Speicherung/Haltung von Programmeinstellungen.
    Zu meinem Aufbau:
    Ich habe eine Solution mit 4 Projekten:
    - Data -> Model, DAL, UnitOfWork
    - FormsUI -> View in Form von WindowsForms
    - Helper -> Helferleins fürs Loggen, Serialisieren, ...
    - Tests -> Unittest

    im Projekt Data existiert eine Klasse 'ProgramSetting' welche diverese primitive Eigenschaften besitzt. Ganz simple.
    Diese Klasse wird als xml serialisiert und im Ausgabeverzeichnis als .xml angelegt.
    Beim erneuten Start lese ich diese Setting.xml wieder aus (deserialisiere) und halte es in der Form als lokale Variable.

    Dies passiert einmal beim Programmstart.

    Nun benötige ich dieses Settingsobjekt aber auch im Data-Projekt, da es bestimmte Maximalwerte beinhaltet welche ich zur Überprüfung benötige.

    Ich sehe hierbei aber nur 2 Wege welche ich beide nicht verwenden will:
    - Ich lese die Settings erneut im Data-Projekt aus. Finde ich einen Overhead, da dies dann recht häufig der Fall wäre.
    - Ich reiche das Settings-Objekt bis zur gewünschten Klasse durch. Was derzeit aber schon 2 mal der Fall wäre (eine Manager-Klasse und eine Abstrakte Klasse). Find ich auch nicht passend.

    Gibt es hier ein "Best-Practice" wie man sowas elegant lösen könnte?
    Falls noch mehrere Infos benötigt werden, bitte einfach danach fragen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    User in dem Sinn gibt es in dem Programm nicht. Es sind halt diverse Sachen wie LogFileName, Max-Werte uns solch Schnickschnack.
    Ich habe es deswegen ins DAL verschoben, da ich der Meinung bin, dass es im View nichts zu suchen hat. Würde ich zum Beispiel eine zusätzliche WPF- oder Mobile-Anwendung hinzufügen, gelten hier auch dieselben Settings wie in der Winforms-Anwendung.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    @fichz Wir haben einen felten Speicherort für unsere Settings, dort liegen die Settings einzelner System-Komponenten in separeten XML-Dateien, z.B. sind Motor-Beschleunigung und Co separat, Kamerabelichtungszeiten usw. ebenfalls, so dass da mal 5 bis 10 Settings-Dateien anfallen. Alles fein säuberlich gekapselt.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Der Speicherort ist ja nicht das Problem. Ist immer der Pfad wo auch die .exe liegt. Mir geht es eher um das Verwalten des Settingsobjektes da ich es nicht immer wieder frisch einlesen möchte (braucht ja auch lt. Test ~ 100 ms).

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    fichz schrieb:

    des Settingsobjektes
    Eines einzigen?
    Teile Deine Settings auf.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich glaube wir reden aneinander vorbei. Mir geht es darum, dass ich nicht immer wieder die xml einlesen möchte bevor ich die Überprüfung starte.
    Ich habe es nun aber so gelöst, dass die abstrakte Basisklasse im Konstruktor das xml einmalig einlest und in einer Protected Variable aufrecht erhält.
    Somit wird zwar beim Instanziieren jeder Implementierung das File erneut eingelesen, aber halt nur einmal.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten