Ho la seguente situazione: ho una classe (chiamiamola Main) che incapsula un processo complesso. Questa classe a sua volta orchestra una sequenza di subalgoritmi (AlgoA, AlgoB), ognuno rappresentato da una classe individuale.
Per configurare Main, ho una configurazione memorizzata in un oggetto di configurazione MainConfig. Questo oggetto contiene tutte le informazioni di configurazione per AlgoA e AlgoB con i loro parametri specifici. AlgoA non ha interesse per le informazioni relative alla configurazione di AlgoB, quindi tecnicamente potrei avere (e in pratica ho) delle istanze MainConfig.AlgoAConfig e MainConfig.AlgoBConfig contenute e inizializzare come AlgoA (MainConfig.AlgoAConfig) e AlgoB (MainConfig) .AlgoBConfig).
Il problema è che ci sono alcuni dati di configurazione comuni. Un esempio è il printLevel. Al momento ho MainConfig.printLevel. Devo propagare queste informazioni sia ad AlgoA che ad AlgoB, perché devono sapere quanto stampare. MainConfig ha anche bisogno di sapere quanto stampare. Quindi le soluzioni disponibili sono
- Ho passato il MainConfig ad AlgoA e AlgoB. In questo modo, AlgoA ha tecnicamente accesso all'intera configurazione (anche quella di AlgoB) ed è meno autosufficiente
- Copio MainConfig.printLevel in AlgoAConfig e AlgoBConfig, quindi sostanzialmente ho ripetuto tre informazioni printLevel.
- Creo una terza classe di configurazione PrintingConfig. Ho una variabile di istanza MainConfig.printingConfig, e poi passo ad AlgoA sia MainConfig.AlgoAConfig che MainConfig.printingConfig.
Hai mai trovato questa situazione? Come l'hai risolto ? Quale è stilisticamente più chiaro per un nuovo lettore del codice?