In questo articolo di Alex Papadimoulis, puoi vedere questo frammento:
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.
Quoto:
Se ogni costante delle regole di business fosse memorizzata in un file di configurazione, la vita sarebbe molto [più ( sic )] difficile per tutti coloro che gestiscono il software: ci sarebbero molti file di codice che condividessero uno, un file grande (o, il contrario, molti piccoli file di configurazione); l'implementazione delle modifiche alle regole aziendali non richiede un nuovo codice, ma modifica manuale dei file di configurazione; e il debug è molto più difficile.
Questo è un argomento contro la presenza del 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 frammento, "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 sottratto. 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 interruzione nella funzionalità. Questo numero può essere utilizzato in più di un posto, ma non è il numero che stai utilizzando; è l'idea del limite / limite, al di sotto della quale si applica una regola e al di sopra della quale si applica un'altra.
In che modo fare riferimento ad esso da un file di configurazione, o persino da #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 i file). Questo è chiaramente peggio per il debug.
Inoltre, se domani il governo richiede "Dal 3/5/250, è 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").
Vorrei chiarire. Non sto dicendo che l'articolo sia sbagliato; Semplicemente non capisco; forse non è troppo ben spiegato (almeno per il mio pensiero).
Capisco che sostituire ogni possibile valore letterale o numerico di stringa con una variabile costante, di definizione o di configurazione, non solo non è necessario, ma complica troppo le cose, ma questo particolare esempio non sembra rientrare in questa categoria. Come fai a sapere che non ti servirà più tardi? O qualcun altro per quella materia?