Se aggiungi nuove opzioni di configurazione a un programma, spesso può avere tonnellate di effetti a catena in termini di ottenere le opzioni su dove devono essere attuate. Sono a conoscenza di tre modi di base di cui sono a conoscenza:
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 che disaccoppia le cose di più. Il rovescio della medaglia è che questo è sia prolisso che fragile.
Rende globali / statiche le impostazioni di configurazione utilizzate più di frequente. Questo è il modo più semplice ma introduce un'azione a distanza, ostacola la testabilità e presuppone che la configurazione sia veramente globale (che si vorrebbe solo una configurazione in un dato momento).
Crea una classe / struttura di configurazione che contenga tutte le opzioni di configurazione per l'intero programma o per ciascuna delle principali preoccupazioni 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. Ciò è utile sia nei test che nella pratica. Tuttavia, si finisce con il passare potenzialmente tonnellate di informazioni a una funzione che non è necessaria e la modifica di un valore nella classe / struttura di configurazione può comunque causare azioni a distanza.
Considereresti (3) un modello o un anti-modello? Se è un anti-pattern, cosa fai invece?