globale Konfiguration; Wie realisieren?
-
Hallo Leute,
zunächst nochmal ein frohes neues Jahr
Folgendes.... Ich habe ein Programm, das eine gewisse Anzahl an Optionen (i.d.R. defines) nutzt. Da ich nicht bei jeder Änderung neu kompilieren will und auch außerhalb des Programms die Einstellungen ändern möchte, bietet sich beispielsweise eine ini-Datei an. Diese kann beim Programmstart eingelesen werden und die entsprechenden Werte der Anwendung zur Verfügung stellen. Jetzt stellt dich die Frage wie diese Bereitstellung nun am besten erfolgt?
- Ich könnte z.B. in jeder Klasse einen Header hinzufügen (z.B: 'settings.h'), in der dann ein namespace mit den jeweiligen Einstellung ist.
- Man könnte ein Singleton erstellen, auf das global zugegriffen werden kann. Aber wie sieht es mit der Testbarkeit aus?
- Eine weitere Alternative ist dependency injection, jedoch müsste man die settings in vielen Klassen übergeben und wirkt daher ungeeignet.Wie würdet ihr vorgehen, insbesondere wenn die Software noch testbar sein soll?
viele Grüße,
SBond
-
Das hast du jetzt denk ich noch nicht zu Ende durchdacht...
Was bringt dir ein Header, wenn du die Optionen dynamisch einlesen willst? Bleiben also nur die letzten beiden Möglichkeiten.
Ein Singleton, oder Klassen, die ihre Optionen selber einlesen, sind meist ziemlich unflexibel. Nicht nur in Hinsicht auf das Testen. Ich hab das schon sehr oft gesehen, dass ein Modul, das die Einstellungen selber ausgelesen hat, dann irgendwann auch an einer anderen Stelle eingesetzt werden sollte, natürlich mit anderen Einstellungen.
Deswegen ist es meist besser, die Einstellungen zu übergeben. Ich würds aber nicht als Dependency Injection bezeichnen, Einstellungen sind keine Abhängigkeiten.
-
ja das ist nicht ganz einfach.
Bisher habe ich das immer mit einer kaskadierten struct gemacht, die dann irgendwie in die Klasse eingebettet wurde und... naja... nicht wirklich gut war. So eine quick-and-dirty-Lösung wollte ich daher vermeiden. Ich weiß nicht wie es andere machen und welche Stolpersteie es gibt.
viele Grüße,
SBond...damals war alles noch einfacher...
`
LOAD"*",8,1
SEARCHING FOR *
LOADING
READY.
RUN
`
-
Mechanics schrieb:
Ich würds aber nicht als Dependency Injection bezeichnen, Einstellungen sind keine Abhängigkeiten.
Öh
Nicht?
Ich tu mich grad schwer mir etwas vorzustellen was nötig wäre um etwas als Abhängigkeit zu definieren was auf Einstellungen nicht zutrifft...
-
Hmm, anscheinend sehen das andere auch so, z.B. hier:
https://www.devtrends.co.uk/blog/configuration-settings-are-a-dependency-that-should-be-injected
Find die Vorstellung aber etwas ungewohnt.
-
SBond schrieb:
...damals war alles noch einfacher...
`
LOAD"*",8,1
SEARCHING FOR *
LOADING
READY.
RUN
`
Das erste File im Diskettendirectory laden?
-
Ich denke ich werde mich für Dependency Injection entscheiden
@lemon03: zu den Zeiten reichten mir als kleiner Bub der LOAD- und RUN-Befehl um glücklich zu sein.
...und ein Joystick
viele Grüße,
SBond