Em este artigo por Alex Papadimoulis, você pode ver este trecho:
private void attachSupplementalDocuments()
{
if (stateCode == "AZ" || stateCode == "TX") {
//SR008-04X/I are always required in these states
attachDocument("SR008-04X");
attachDocument("SR008-04XI");
}
if (ledgerAmnt >= 500000) {
//Ledger of 500K or more requires AUTHLDG-1A
attachDocument("AUTHLDG-1A");
}
if (coInsuredCount >= 5 && orgStatusCode != "CORP") {
//Non-CORP orgs with 5 or more co-ins require AUTHCNS-1A
attachDocument("AUTHCNS-1A");
}
}
Eu realmente não entendo este artigo.
Eu cito:
Se cada constante de regras de negócios foi armazenado em algum arquivo de configuração, a vida seria muito [mais ( sic )] difícil para todos manter o software: haveria um monte de arquivos de código que compartilhou um, grande arquivo (ou, o contrário, um monte de pequenos arquivos de configuração); a implantação de alterações nas regras de negócios não exige um novo código, mas a alteração manual dos arquivos de configuração; e depuração é muito mais difícil.
Este é um argumento contra o número inteiro constante "500000" em um arquivo de configuração ou o "AUTHCNS-1A" e outras constantes de seqüência de caracteres.
Como isso pode ser uma má prática?
Nesse snippet, "500000" não é um número. Não é, por exemplo, o mesmo que:
int doubleMe(int a) { return a * 2;}
onde 2, é um número que não precisa ser abstraído. Seu uso é óbvio e não representa algo que possa ser reutilizado posteriormente.
Pelo contrário, "500000" não é simplesmente um número. É um valor significativo, que representa a ideia de um ponto de interrupção na funcionalidade. Esse número pode ser usado em mais de um local, mas não é o número que você está usando; é a ideia do limite / limite, abaixo do qual uma regra se aplica e acima do qual outra regra.
Como está se referindo a ele a partir de um arquivo de configuração, ou mesmo a #define
, const
ou qualquer que seja o idioma fornecido, pior do que incluir seu valor? Se mais tarde no programa, ou algum outro programador, também exigir esse limite, para que o software faça outra escolha, você estará ferrado (porque quando ele muda, nada garante que ele será alterado nos dois arquivos). Isso é claramente pior para a depuração.
Além disso, se amanhã, o governo exigir "De 5/3/2050, você precisará adicionar AUTHLDG-122B em vez de AUTHLDG-1A", essa constante de sequência não será uma constante de sequência simples. É aquele que representa uma ideia; é apenas o valor atual dessa ideia (que é "a coisa que você adiciona se o razão estiver acima de 500k").
Deixe-me esclarecer. Não estou dizendo que o artigo está errado; Eu simplesmente não entendo; talvez não esteja muito bem explicado (pelo menos para o meu pensamento).
Entendo que a substituição de cada valor literal ou numérico de string possível por uma variável constante, definida ou de configuração não é apenas não necessária, mas complicada demais, mas esse exemplo em particular não parece se encaixar nessa categoria. Como você sabe que não precisará mais tarde? Ou alguém mais para esse assunto?