In questo articolo di Alex Papadimoulis, puoi vedere questo snippet:
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");
}
}
Davvero non capisco questo articolo.
Cito:
If every business rule constant was stored in some configuration file, life would be much [more (sic)] difficult for everyone maintaining the software: there’d be a lot of code files that shared one, big file (or, the converse, a whole lot of tiny configuration files); deploying changes to the business rules require not new code, but manually changing the configuration files; and debugging is that much more difficult.
Questo è un argomento contro il numero intero costante "500000" in un file di configurazione, o "AUTHCNS-1A" e altre costanti di stringa.
Come può essere una cattiva pratica?
In questo snippet, "500000" non è un numero. Ad esempio, non è lo stesso di:
int doubleMe(int a) { return a * 2;}
dove 2, è un numero che non deve essere astratto. Il suo uso è ovvio e non rappresenta qualcosa che può essere riutilizzato in seguito.
Al contrario, "500000" non è semplicemente un numero. È un valore significativo, che rappresenta l'idea di un punto di rottura nella funzionalità. Questo numero potrebbe essere utilizzato in più di un posto, ma non è il numero che stai usando; è l'idea del limite / limite, al di sotto della quale si applica una regola e al di sopra della quale un'altra.
Come ci si riferisce da un file di configurazione, o anche a #define
, const
o qualunque sia la tua lingua, peggio che includerne il valore? Se in seguito il programma, o qualche altro programmatore, richiede anche quel limite, in modo che il software faccia un'altra scelta, sei fregato (perché quando cambia, nulla ti garantisce che cambierà in entrambi File). Questo è chiaramente peggio per il debug.
Inoltre, se domani il governo chiedesse "Dal 5/3/2050, è necessario aggiungere AUTHLDG-122B invece di AUTHLDG-1A", questa costante di stringa non è una costante di stringa semplice. È uno che rappresenta un'idea; è solo il valore corrente di quell'idea (che è "la cosa che aggiungi se il libro mastro è superiore a 500k").
Lasciatemi chiarire. Non sto dicendo che l'articolo è sbagliato; Io proprio non capisco; forse non è spiegato troppo bene (almeno per il mio pensiero).
Capisco che la sostituzione di ogni possibile valore letterale o numerico stringa con una costante, definizione o variabile di configurazione, non solo non sia necessaria, ma comporti un eccesso di complessità, ma questo particolare esempio non sembra rientrare in questa categoria. Come fai a sapere che non ne avrai più bisogno in seguito? O qualcun altro, per quello?