Se você adicionar novas opções de configuração a um programa, ele poderá ter muitos efeitos colaterais em termos de levar as opções para onde elas precisam ser executadas. Existem três maneiras básicas de lidar com isso que eu conheço:
Passe todas as definições de configuração para as partes do seu programa que precisam delas explicitamente como primitivas. Essa é a maneira mais explícita e a que mais desacopla as coisas. A desvantagem é que isso é detalhado e quebradiço.
Torne as definições de configuração usadas com mais freqüência global / estáticas. Essa é a maneira mais simples, mas introduz ação à distância, dificulta a testabilidade e assume que a configuração é realmente global (que você deseja apenas uma configuração a qualquer momento).
Faça uma classe / estrutura de configuração que contenha todas as opções de configuração para todo o programa ou para cada preocupação principal do programa e repasse-a explicitamente. Isso é menos explícito que (1), mas mais explícito que (2). Se você deseja alterar uma configuração apenas para uma chamada de função, pode clonar o objeto de configuração e alterar esse valor. Isso é útil nos testes e na prática. No entanto, você ainda acaba potencialmente passando toneladas de informações para uma função que não precisa, e alterar um valor na classe / estrutura de configuração ainda pode causar ações à distância.
Você consideraria (3) um padrão ou um antipadrão? Se é um anti-padrão, o que você faz?