Wenn Sie einem Programm neue Konfigurationsoptionen hinzufügen, kann dies häufig zu erheblichen Welligkeitseffekten führen, wenn Sie die Optionen dahin bringen, wo sie bearbeitet werden müssen. Es gibt drei grundlegende Möglichkeiten, um damit umzugehen, die mir bekannt sind:
Übergeben Sie alle Konfigurationseinstellungen an die Teile Ihres Programms, die sie explizit als Grundelemente benötigen. Dies ist der expliziteste Weg und der Weg, der die Dinge am meisten entkoppelt. Der Nachteil ist, dass dies sowohl ausführlich als auch spröde ist.
Nehmen Sie die am häufigsten verwendeten Konfigurationseinstellungen global / statisch vor. Dies ist der einfachste Weg, führt jedoch Aktionen aus der Ferne ein, behindert die Testbarkeit und setzt voraus, dass die Konfiguration wirklich global ist (Sie möchten jeweils nur eine Konfiguration).
Erstellen Sie eine Konfigurationsklasse / -struktur, die alle Konfigurationsoptionen für das gesamte Programm oder für jedes Hauptproblem innerhalb des Programms enthält, und geben Sie diese dann explizit weiter. Dies ist weniger explizit als (1), aber expliziter als (2). Wenn Sie eine Einstellung nur für einen Funktionsaufruf ändern möchten, können Sie das Konfigurationsobjekt klonen und diesen einen Wert ändern. Dies ist sowohl beim Testen als auch in der Praxis nützlich. Am Ende übergeben Sie jedoch möglicherweise Tonnen von Informationen an eine Funktion, die nicht benötigt wird, und das Ändern eines Werts in der Konfigurationsklasse / -struktur kann immer noch zu Aktionen in der Ferne führen.
Würden Sie (3) ein Muster oder ein Anti-Muster in Betracht ziehen? Was machen Sie stattdessen, wenn es sich um ein Anti-Pattern handelt?