Buenas Prácticas: Encapsular Construcciones Complejas

Supongo que estaréis acostumbrados a ver cosas como estas (código C#)
Response.Redirect(“~/home/pepito.aspx?idarticulo=” + idarticulo.toString() + “&idusuario=” + idusuario.toString() + “&idcategoria=” + idcategoria.toString() + “&activo=” + activo);
En el caso del ejemplo tenemos la instrucción response.redirect, la cual muchos de vosotros conoceréis, y que se encarga de redireccionar a nuestro navegador a la url que se le pasa por parámetro. Muchas veces vamos a necesitar pasar valores en la URL para que sean recogidas en la página de destino, y “no nos queda más remedio” que hacerlo de esta manera.
La verdad es que para redirecciones con urls sencillas aíºn es tratable, pero como tengamos que empezar a concatenar parámetros y más parámetros, te puedes volver loco. Por ello, una buena práctica resulta el encapsular todos estos oomportamientos para ayudar en la lectura del código y el posterior mantenimiento de la aplicación.
Os dejo aquí­ el comportamiento de hipotética clase que encapsula esta buena práctica, a ver si qué os parece (código C#)
Redireccion miURL = new Redireccion(“~/home/pepito.aspx”);
miURL.AddParameter(“idarticulo”, idarticulo);
miURL.AddParameter(“idusuario”, idusuario);
miURL.AddParameter(“idcategoria”, idcategoria);
miURL.AddParameter(“activo”, activo);
miURL.Ir();
¿Cómo lo leéis mejor? ¿Os hacéis una idea de lo que hace por dentro la clase, no?
AddParameter es un método sobrecargado donde el primer parámetro es el nombre y el segundo el valor. Podemos pasarle como valor diferentes tipos de datos, ya que está sobrecargado con el tratamiento para cada uno de ellos.
El constructor acepta un parámetro de entrada que es la base de la url a la que vamos a llamar, aunque podrí­amos instanciar la clase sin pasarle ningíºn parámetro, y luego usar la propiedad miURL.URLBase para definirla.
Por supuesto, y siguiendo las buenas prácticas, la clase Redirección deberí­a encapsular también sus excepciones propias que lanzarí­a en los casos necesarios y que podrí­an capturarse desde fuera. Por ejemplo, ¿y si instanciamos la clase sin pasarle la URL base y tampoco la añadimos usando la propiedad? Al lanzar el método Ir() deberí­a saltar una “NoHayURLBaseDefinidaException”, ¿no creéis?
Otro consejo para rematar, serí­a sobreescribir el método toString() de la clase, para que devolviera la URL generada hasta el momento, y así­ poder hacer cosas del tipo:
MostrarMensaje(“Esta es la URL Generada: “+  miURL);
Esta forma de encapsular las construcciones complejas es aplicable a otros campos, como por ejemplo para generar una secuencia SQL. Otro dí­a os dejo un ejemplo.
Saludos.
Miguel.

2 thoughts on “Buenas Prácticas: Encapsular Construcciones Complejas”

  1. Hola Miguel, otra opción para evitar depender de otra clase es:
    Esta forma de concatenar es muy fácil de leer.
    string url= string.Format(”~/home/pepito.aspx?{0}&idusuario={1}&idcategoria={2}&activo={3}”, new object[]{idarticulo,idusuario,idcategoria,activo});
    Response.Redirect(url);
    Saludos y muy buena página

  2. Totalmente de acuerdo Mariano, el uso de String.Format ayuda bastante a mejorar la claridad y por tanto la mantenibilidad sin necesidad de utilizar una clase de apoyo.
    De todas maneras ten en cuenta que en la clase Redirección podemos encapsular muchos más métodos para ayudarnos a gestionar una URL, por lo que la solución puede resultar a la larga mucho más potente y reutilizable.
    Gracias por la aportación.
    Un saludo.
    Miguel.

Leave a Reply to Mariano Cancel reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.