En este artículo por Alex Papadimoulis, puedes ver este fragmento:
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");
}
}
Realmente no entiendo este artículo.
Cito:
Si todas las constantes de reglas de negocios se almacenaran en algún archivo de configuración, la vida sería mucho [más ( sic )] difícil para todos los que mantienen el software: habría muchos archivos de código que se compartieron uno, archivo grande (o, a la inversa, una gran cantidad de archivos de configuración pequeños); la implementación de cambios en las reglas de negocios no requiere un nuevo código, sino el cambio manual de los archivos de configuración; y la depuración es mucho más difícil.
Este es un argumento en contra de tener el entero constante "500000" en un archivo de configuración, o el "AUTHCNS-1A" y otras constantes de cadena.
¿Cómo puede ser esto una mala práctica?
En este fragmento, "500000" no es un número. No es, por ejemplo, lo mismo que:
int doubleMe(int a) { return a * 2;}
donde 2, es un número que no necesita ser resumido. Su uso es obvio y no representa algo que pueda reutilizarse más adelante.
Por el contrario, "500000" no es simplemente un número. Es un valor significativo, uno que representa la idea de un punto de ruptura en la funcionalidad. Este número podría usarse en más de un lugar, pero no es el número que está usando; es la idea del límite / límite, debajo de la cual se aplica una regla y encima de la otra.
¿Cómo se refiere a él desde un archivo de configuración, o incluso un #define
, const
o lo que sea que proporcione su idioma, peor que incluir su valor? Si más adelante el programa, o algún otro programador, también requiere ese límite, para que el software haga otra elección, estás jodido (porque cuando cambia, nada te garantiza que cambiará en ambos archivos). Eso es claramente peor para la depuración.
Además, si mañana, el gobierno exige "Desde el 5/3/2050, debe agregar AUTHLDG-122B en lugar de AUTHLDG-1A", esta constante de cadena no es una simple cadena de constantes. Es uno que representa una idea; es solo el valor actual de esa idea (que es "lo que agrega si el libro mayor está por encima de 500k").
Déjame aclarar. No estoy diciendo que el artículo esté mal; Simplemente no entiendo; tal vez no esté muy bien explicado (al menos para mi pensamiento).
Entiendo que reemplazar cada posible valor literal o numérico de cadena con una constante, definición o variable de configuración, no solo no es necesario, sino que complica las cosas, pero este ejemplo en particular no parece pertenecer a esta categoría. ¿Cómo sabes que no lo necesitarás más adelante? ¿O alguien más para eso?