En este artículo de 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.
Yo cito:
Si cada constante de la regla de negocio se almacenara 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 compartían uno, un archivo grande (o, por el contrario, una gran cantidad de pequeños archivos de configuración); desplegar cambios en las reglas de negocio no requiere un código nuevo, sino cambiar manualmente 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 abstraído. 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 interrupción 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, por debajo del cual se aplica una regla y por encima del cual se aplica otra.
¿Cómo es referirse a él desde un archivo de configuración, o incluso a #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 constante de cadena simple. 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 digo que el artículo esté equivocado; 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 variable constante, definida o de configuración, no solo no es necesario, sino que complica demasiado las cosas, sino que 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 el caso?