O autor está alertando contra a abstração prematura.
A linha if (ledgerAmt > 500000)
se parece com o tipo de regra de negócios que você esperaria ver para sistemas de negócios complexos e grandes, cujos requisitos são incrivelmente complexos, mas precisos e bem documentados.
Normalmente, esses tipos de requisitos são excepcionais / casos de borda, em vez de lógica útil reutilizável. Esses requisitos são geralmente de propriedade e mantidos por analistas de negócios e especialistas no assunto, e não por engenheiros
(Observe que a "propriedade" de requisitos por analistas de negócios / especialistas nesses casos normalmente ocorre quando os desenvolvedores que trabalham em áreas especializadas não possuem conhecimento suficiente no domínio; embora eu ainda espere uma comunicação / cooperação completa entre desenvolvedores e especialistas no domínio para proteger contra requisitos ambíguos ou mal escritos.)
Ao manter sistemas cujos requisitos são repletos de casos de ponta e lógica altamente complexa, geralmente não há como abstrair essa lógica ou torná-la mais sustentável; tentativas de tentar construir abstrações podem facilmente sair pela culatra - não apenas resultando em perda de tempo, mas também resultando em código menos passível de manutenção.
How is referring to it from a config file, or even a #define, const or whatever your language provides, worse than including its value? If later on the program, or some other programmer, also requires that borderline, so that the software makes another choice, you're screwed (because when it changes, nothing guarantees you that it will change in both files). That's clearly worse for debugging.
Esse tipo de código tende a ser guardado pelo fato de que o próprio código provavelmente tem um mapeamento de um para um para os requisitos; Ou seja, quando um desenvolvedor sabe que a figura 500000
aparece duas vezes nos requisitos, esse desenvolvedor também sabe que aparece duas vezes no código.
Considere o outro cenário (igualmente provável) em que 500000
aparece em vários lugares no documento de requisitos, mas os especialistas no assunto decidem alterar apenas um deles; aí você tem um risco ainda maior de que alguém alterando o valor const
possa não perceber que 500000
é usado para significar coisas diferentes - então o desenvolvedor o altera no único lugar em que ele o encontra no código, e acaba quebrando algo que eles não perceberam que haviam mudado.
Esse cenário acontece muito em software legal / financeiro personalizado (por exemplo, lógica de cotação de seguro) - pessoas que escrevem tais documentos não são engenheiros, e não têm cópia de problema + colando partes inteiras da especificação, modificando algumas palavras / números, mas deixando a maior parte do mesmo.
Nesses cenários, a melhor maneira de lidar com os requisitos de copiar e colar é gravar código copiar e colar e tornar o código semelhante aos requisitos (incluindo a codificação de todos os dados) possível.
A realidade de tais requisitos é que eles normalmente não ficam copiados e colados por muito tempo, e os valores às vezes mudam regularmente, mas eles geralmente não mudam em conjunto, então tentando racionalizar ou abstrair esses requisitos ou simplificá-los de qualquer maneira acaba gerando mais problemas de manutenção do que apenas traduzir os requisitos literalmente em código.