Ir al contenido principal

Programación defensiva

Nos vamos dando cuenta de que programar con todas las de la ley cuesta, y cuesta mucho. Para muestra un botón. Esta es una pequeña muestra de lo que contamos. Esta es una primera versión a la rápida de un código que revisa la versión de la aplicación contra la de la base de datos.

string[] version = ConfigurationManager.AppSettings["version"].Split('.');
int mayor = Convert.ToInt32(version[0]);
int menor = Convert.ToInt32(version[1]);
int? resultado = 0;

DSVersionTableAdapters.VersionCheckTableAdapter adapterVersion =
new DSVersionTableAdapters.VersionCheckTableAdapter();
adapterVersion.GetData(mayor, menor, ref resultado);

if (resultado == 0)
{
log4net.ILog log = log4net.LogManager.GetLogger("Standard");
log.Fatal("No está con buena versión: APP(" + version + ") con la base de datos");
}


Esta es la segunda versión de exactamente el mismo código con un poco de programación defensiva.
string[] version = null;
int mayor = 0;
int menor = 0;
int? resultado = 0;

try
{
version = ConfigurationManager.AppSettings["version"].Split('.');
mayor = Convert.ToInt32(version[0]);
menor = Convert.ToInt32(version[1]);
}
catch (Exception err)
{
log.Fatal("No se encuentra la variable de versión", err);
throw new ApplicationException("No se encuentra la variable de versión, arreglar el Web.config. Debería tener la línea add key=version value=1.0.X", err);
}

try
{
VersionTableAdapters.TBLVERSIONTableAdapter adapterVersion =
new VersionTableAdapters.TBLVERSIONTableAdapter();
adapterVersion.GetData(mayor, menor, ref resultado);
}
catch (Exception err)
{
log.Fatal("No existe la tabla de las versiones");
throw new ApplicationException("La tabla de versiones NO se encuentra o NO tiene una línea de versionamiento", err);
}
if (resultado == 0)
{
log.Fatal("No está con buena versión: APP(" + version + ") con la base de datos");
throw new ApplicationException("La versión de la base de datos NO corresponde con la de la aplicación. Revise la tabla TBLVERSION y el fichero web.config");
}

Es algo que muchísima gente lo hace y lo hace muy bien, pero últimamente he visto algunos ejemplos desprolijos (incluyendo míos y valía la pena la reflexión).

Por otro lado, no importa el código en sí pero si algo hay que saber es que el código con progrmaación defensiva y log/trace es algo así como 6 a 7 veces más grande que el código que contempla solamente el mejor caso.

Así que si haces algo desprolijo, es probable que en realidad sea 6 veces más largo para que sea como la gente

Comentarios

Entradas más populares de este blog

Hangfire, si no lo estás usando, estás haciendo algo mal (.NET world)

Hangfire es una librería espectacular que permite encolar tareas en un servidor de tareas que funciona dentro de tu aplicación web. Existen varios tutoriales que muestran de manera bastante sencilla cómo puedes ir integrando esto a tu aplicación. En esta publicación vamos a repetir, pero en español, y sobretodo vamos a tratar de ir lo más al punto posible. Qué es? Es una librería que la cargas a través de NUGET como cualquier otra librería. En realidad tenemos que cargar 3 librerías pero eso lo veremos más adelante. Una vez que hayas cargado todo lo necesario en tu aplicación web tendrás lo siguiente: Un servidor de colas : es decir, un lugar al cual le puedes mandar hacer cosas y no se olvida de esas cosas y las va ejecutando a medida que puede o tiene tiempo. Esto es muy útil para que tu aplicación no pierda tiempo haciendo algo que no necesita realmente hacer en ese instante y devolver más rápido al usuario final. Un tablero de control de colas : una serie de ...

El contagio top-bottom

 Charlábamos en una reunión bastante informal el tema de que el equipo de fútbol de Bolivia era un fiel reflejo de la sociedad boliviana actual y que sus resultados están acorde con esta realidad. Y nos pusimos a reflexionar. Qué importante es que la cabeza, las instituciones, los grupos de poder, las empresas, ... funcionen de manera correcta. No es una regla pero el individuo se suele dejar llevar por lo que impulsa el grupo social donde está: En la familia se comporta como se comportan la mayor parte de los familiares En el trabajo se comporta como se comportan la mayor parte de los colegas En una tienda se comporta como se comportan la mayor parte de los clientes En un juicio se comporta como se comportan la mayor parte de los juzgados En el congreso del país se comporta como se comportan la mayor parte de los diputados etc... De nuevo, no es una regla, pero indefectiblemente la mayoría logra arrastrar a un porcentaje importante de cada uno de los que participa de un grupo. En ...

Con la vejez a cuestas

 La vida tiene sus etapas. Todos las conocemos, y por mucha preparación que tengamos, nunca estamos completamente listos para cada una de ellas. Y lo bonito es que cada uno de nosotros es un universo con cosas, memorias y vivencias muy particulares. Uno nunca sabe cuál es el gatillo que te enviará la bala con la cual te darás cuenta de la etapa en que estás. Algunos tienen la suerte de madurar a medida que pasa la vida y tienen estas transiciones un poco mejor programadas, aunque entiendo que el choque puede ser igual de fuerte, conciente es verdad, pero choque al fin. Otros, como su humilde escritor, tienen la desdicha que madurar cuando el árbol ya se hizo leña y está en medio del proceso de carbonizarse.  Estaba en el tradicional corte de pelo; y el peluquero, luego de la charla igual de tradicional, me acerca el espejo móvil para que, con el doble reflejo pueda ver la calidad del trabajo detrás de mi cabeza. Esta operación para mí es como cuando te dan para degustar el vin...