Como outros dizem, idealmente, a classe de renda do trabalhador permitiria a parametrização da constante, tornando essa classe independente desse valor.
Por fim, o aplicativo de chamada também pode permitir a parametrização em termos de configuração externa (por exemplo, um arquivo). Assim que tivermos uma configuração externa, podemos alterar a taxa de imposto - embora considere que, se o arquivo de configuração for lido apenas uma vez na inicialização, o aplicativo precisará ser reiniciado para que as porcentagens de impostos atualizadas entrem em vigor, portanto é algo a manter mente. Poderíamos fornecer um recurso de aplicativo para reler a configuração quando solicitado, ou fornecer um mecanismo mais complicado que notará quando o arquivo de configuração é alterado ...
A longo prazo, você pode achar que as questões tributárias exigem mais do que apenas uma porcentagem - por exemplo, que um dia as leis tributárias são mais complexas e exigem várias porcentagens e algumas constantes (por exemplo, o valor abaixo de US $ 10 mil tributado em X%, enquanto o restante tributado em Y%).
Isso basicamente sugere o uso de um padrão de estratégia, em que a classe principal em questão aqui aceita um objeto de estratégia para calcular o imposto.
As várias estratégias (e% 's e $ constantes) devem ser escolhidas no arquivo de configuração e, agora, adicionar uma nova estratégia exige a adição de um novo código, mas não necessariamente a atualização do código existente.
Cada estratégia pode saber como analisar / interpretar seus próprios argumentos de configuração externa, além de como calcular o imposto real.
Dinamicamente, o imposto pode depender ainda mais do código de idioma do governo, portanto, você pode ter um código de idioma associado a ganhos ou a funcionários (ou ambos). Na configuração externa, podemos associar localidade à estratégia tributária.
Veja também injeção de dependência , onde gerenciamos essas coisas explicitamente.