Dans cet article de Alex Papadimoulis, vous pouvez voir cet extrait:
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");
}
}
Je ne comprends vraiment pas cet article.
Je cite:
Si chaque constante de règles métier a été enregistrée dans un fichier de configuration, la vie serait beaucoup [plus ( sic )] difficile pour tout le monde en maintenant le logiciel: il y aurait beaucoup de fichiers de code qui a partagé un, gros fichier (ou, l'inverse, beaucoup de fichiers de configuration minuscules); le déploiement de modifications aux règles de gestion ne nécessite pas de nouveau code, mais une modification manuelle des fichiers de configuration; et le débogage est d'autant plus difficile.
Ceci est un argument contre le nombre entier constant "500000" dans un fichier de configuration, ou le "AUTHCNS-1A" et d'autres constantes de chaîne.
Comment cela peut-il être une mauvaise pratique?
Dans cet extrait, "500000" n'est pas un nombre. Ce n'est pas, par exemple, le même que:
int doubleMe(int a) { return a * 2;}
où 2 est un nombre qu'il n'est pas nécessaire d'extraire. Son utilisation est évidente, et il ne représente pas quelque chose qui peut être réutilisé plus tard.
Au contraire, "500000" n'est pas simplement un nombre. C'est une valeur significative, qui représente l'idée d'un point d'arrêt dans la fonctionnalité. Ce numéro peut être utilisé à plusieurs endroits, mais ce n'est pas le nombre que vous utilisez; c'est l'idée de limite / limite, en dessous de laquelle une règle s'applique et au-dessus de laquelle une autre.
Comment se réfère à partir d' un fichier de configuration, ou même #define
, const
ou quel que soit votre langue offre, y compris pire que sa valeur? Si, par la suite, le programme, ou un autre programmeur, requiert également cette limite, de sorte que le logiciel fasse un autre choix, vous êtes foutu (car lorsqu’il change, rien ne vous garantit qu’il va changer dans les deux fichiers). C'est clairement pire pour le débogage.
De plus, si demain, le gouvernement demande "À partir du 03/05/2050, vous devrez ajouter AUTHLDG-122B au lieu de AUTHLDG-1A", cette constante de chaîne n'est pas une constante de chaîne simple. C'est une idée qui représente une idée. c'est juste la valeur actuelle de cette idée (qui est "la chose que vous ajoutez si le livre est supérieur à 500k").
Laissez-moi clarifier. Je ne dis pas que l'article est faux; Je ne comprends tout simplement pas; peut-être que ce n'est pas trop bien expliqué (du moins pour ce que je pense).
Je comprends que remplacer chaque valeur littérale ou numérique de chaîne par une variable constante, definition ou de configuration n’est pas non seulement nécessaire, mais complique excessivement les choses, mais que cet exemple particulier ne semble pas appartenir à cette catégorie. Comment savez-vous que vous n'en aurez pas besoin plus tard? Ou quelqu'un d'autre d'ailleurs?