Se aggiungi nuove opzioni di configurazione a un programma, spesso può avere un sacco di effetti a catena in termini di ottenere le opzioni dove devono essere applicate. Ci sono tre modi fondamentali per affrontare questo che sono a conoscenza di:
-
Passa tutte le impostazioni di configurazione alle parti del tuo programma che ne hanno bisogno esplicitamente come primitive. Questo è il modo più esplicito e il modo in cui le cose si disaccoppiano di più. Lo svantaggio è che è al tempo stesso prolisso e fragile.
-
Rendi globali e statiche le impostazioni di configurazione più utilizzate. Questo è il modo più semplice ma introduce un'azione a distanza, ostacola la testabilità e presuppone che la configurazione sia realmente globale (che vorresti solo una configurazione in un dato momento).
-
Crea una classe di configurazione / struct che contenga tutte le opzioni di configurazione per l'intero programma o per ogni problema principale all'interno del programma, quindi passa questo in modo esplicito. Questo è meno esplicito di (1) ma più esplicito di (2). Se si desidera modificare un'impostazione solo per una chiamata di funzione, è possibile clonare l'oggetto config e modificare questo valore. Questo è utile sia nel test che nella pratica. Tuttavia, si finisce comunque per passare potenzialmente tonnellate di informazioni a una funzione che non necessita e la modifica di un valore nella classe di configurazione / struct può ancora causare un'azione a distanza.
Considereresti (3) un pattern o un anti-pattern? Se si tratta di un anti-pattern, cosa fai invece?