55

In großen und komplexen Softwareprodukten wird die Verwaltung konfigurierbarer Einstellungen zu einem großen Problem. Zwei Ansätze, die ich für das Problem gesehen habe, sind:Welche Entwurfsmuster können auf das Problem der Konfigurationseinstellungen angewendet werden?

  • haben jede Komponente im System laden ihre eigene Konfiguration von Konfigurationsdateien oder Registrierungseinstellungen.
  • haben eine Loader-Klasse für Einstellungen, die alle konfigurierbaren Systemeinstellungen lädt und jede Komponente den Settings Loader nach ihren Einstellungen fragt.

Diese Ansätze fühlen sich beide falsch an.

Gibt es Entwurfsmuster, die zur Vereinfachung des Problems verwendet werden könnten? Vielleicht etwas, das die Abhängigkeits-Injektionstechnik ausnutzen würde.

+4

Warum denken Sie, dass Option 2 falsch ist? – ChaosPandion

+2

Es wird normalerweise als Singleton implementiert, obwohl es andere Möglichkeiten gibt, es zu implementieren. –

Antwort

37

Ich bevorzuge es, eine Schnittstelle für die Einstellung Abfrage, Laden und Speichern zu erstellen. Durch die Verwendung der Abhängigkeitsinjektion kann ich dies in jede Komponente einfügen, die es benötigt.

Dies ermöglicht Flexibilität in Bezug auf den Austausch der Konfigurationsstrategie und gibt eine gemeinsame Basis für alles von wo aus arbeiten. Ich bevorzuge einen einzelnen, globalen "Settings Loader" (Ihre Option 2), besonders da ich den Konfigurationsmechanismus für eine einzelne Komponente überschreiben kann, wenn ich das unbedingt tun muss.

+0

hallo, es wird nett sein, wenn Sie einige Probe teilen :) – issamux

17

Ich arbeite derzeit an einem System, bei dem die Konfiguration von einem globalen Singleton-Objekt verwaltet wird, das eine Zuordnung der Konfigurationsschlüssel zu Werten behält. Im Allgemeinen wünschte ich, es wäre nicht so gemacht worden, weil es Nebenläufigkeitsengpässe im System verursachen kann und es für Einheitstesten usw. schlampig ist.

Ich denke Reed Copsey hat das Recht davon (ich wählte ihn herauf) , aber ich würde auf Dependency Injection Martin Fowler große Artikel lesen auf jeden Fall empfehlen:

http://martinfowler.com/articles/injection.html

Einen leichten Nachtrag zu ... wenn Sie irgendein Mock-Objekt-Typen Unit-Tests tun wollen, Dependency Injection ist definitiv der Weg zu gehen.

+0

Es scheint, dass Dekorateur Ihren Bedürfnissen entsprechen. Sie können einen serialisierbaren Dekorator erstellen, der auf seine Art serialisierbare Klassen erstellen kann. Mit der Strategie können alle Objekte ihre Strategie für die Serialisierung haben. Objekte, die nicht serialisiert werden müssen, können die Ignorierungsstrategie verwenden. Diejenigen, die nur ihre Felder OnlyFields Strategie und so weiter serialisieren müssen. Sie sind flexibel beim Hinzufügen neuer Dinge zu Ihrer Konfiguration. Sicher wie alle Ansätze haben das Vor- und Nachteile. –

3

Wie wäre es damit. Sie definieren eine Schnittstelle konfigurierbar mit einer einzigen Methode konfigurieren (Konfiguration). Das Konfigurationsargument ist einfach eine Hashtabelle, die die Namen der Konfigurationsparameter ihren Werten zuordnet.

Root-Objekte können eine Konfigurationshashtable auf beliebige Weise erstellen (zB: Lesen aus einer Konfigurationsdatei). Diese Hashtabelle kann Konfigurationsparameter für das Stammobjekt iselft sowie alle Parameter enthalten, die eine ihrer Komponenten, Unterkomponenten, Unterkomponenten usw. verwenden könnte.

Das Root-Objekt ruft dann configure (configuration) für alle konfigurierbaren Komponenten auf.

Verwandte Themen