Si vous ajoutez de nouvelles options de configuration à un programme, il peut souvent y avoir des tonnes d'effets d'entraînement en termes d'obtention des options là où elles doivent être appliquées. À ma connaissance, il existe trois façons de gérer ce problème:
Passez tous les paramètres de configuration aux parties de votre programme qui en ont explicitement besoin en tant que primitives. C'est le moyen le plus explicite et le plus découplant. L'inconvénient est que c'est à la fois verbeux et cassant.
Rendez les paramètres de configuration les plus fréquemment utilisés globaux / statiques. C'est le moyen le plus simple mais introduit une action à distance, entrave la testabilité et suppose que la configuration est vraiment globale (que vous ne voudriez qu'une seule configuration à un moment donné).
Créez une classe / structure de configuration qui contient toutes les options de configuration pour l'ensemble du programme ou pour chaque problème majeur du programme, puis transmettez-le explicitement. Ceci est moins explicite que (1) mais plus explicite que (2). Si vous souhaitez modifier un paramètre uniquement pour un appel de fonction, vous pouvez cloner l'objet de configuration et modifier cette valeur. Ceci est utile à la fois dans les tests et dans la pratique. Cependant, vous finissez toujours par transmettre des tonnes d'informations à une fonction dont elle n'a pas besoin et la modification d'une valeur dans la classe / structure de configuration peut toujours provoquer une action à distance.
Considérez-vous (3) un motif ou un anti-motif? Si c'est un anti-pattern, que faites-vous à la place?