Este es un proyecto cancelado que no recibe actualizaciones. No obstante, puedes acceder a su archivo como referencia.

Versión Cero

Pon un controlador en tus desarrollos web

Me ha parecido muy interesante el último artículo de Digital Web donde se habla de los patrones de presentación Web y la arquitectura Model-view-controller. Para los que no estén familiarizados con este tipo de metodologías, el dibujito que acompaña al artículo es muy esclarecedor:

El modelo se entiende con facilidad: cuando se realiza una petición HTTP, antes de volcar la respuesta (normalmente en HTML, pero el caso es el mismo cuando se devuelve XML, PDF, etc.) un mecanismo en el código evalúa los inputs, realiza las acciones oportunas basándose en un “diccionario” de posibles argumentos y establece el valor de variables y objetos globales. A continuación transfiere el control a la presentación de la página, donde la interfaz debería encargarse de indicar al usuario qué es lo que realmente hemos hecho con su petición: resultados de búsqueda, entrada en un backoffice, mostrar errores encontrados, etc…

El artículo plantea los dos casos de uso de este principio. El Page Controller es el uso natural, cada página se controla a sí misma y a veces podría ser una entidad independiente de todo el desarrollo. Este es el tipo de metodología que encontraremos en la mayoría de proyectos Web. El otro caso es el Front Controller, que extiende el modelo de escucha y control a cualquier petición realizada, y aunque cada página disponga de su propio módulo de presentación, el núcleo de respuesta que decide el estado del sistema es común a toda la aplicación.

Implementar un controlador es sencillo. Puedes hacerlo mediante una clase única que se instancia en cada petición, o bien un conjunto de variables globales, funciones, etc.

-Eh, que mi “aplicación” es una página web para la tienda de la esquina y no necesito ese rollo de controladores, como mucho para el formulario de contacto, y eso ya lo tengo arreglado.

Bueno, probablemente con lo que tienes puede bastar. Pero veamos qué ventajas pueden extraerse de introducir un controlador común a todo el desarrollo:

  • Antes de llamar al controlador puedes definir en sus variables el título de la página, palabras claves, imagen de la cabecera, etc. El controlador los almacena y las cabeceras y los pies de página pueden ser includes que tomen estas referencias del controlador. Muy útil para meter aquí todas las técnicas SEO.
  • Si la mayoría de las páginas contiene un formulario de búsqueda, enviar a un amigo, etc. el controlador podría encargarse de comprobar si se han realizado búsquedas, almacenar los resultados, etc.
  • Registra los referers y añade un sistema de estadísticas personalizado desde el controlador sin añadir más dependencias a la aplicación.
  • Controla el estado de las cookies u otro sistema para comprobar la identificación de usuarios en las páginas de administración.
  • En una única función/método se centralizan todos los casos de uso del sitio web, y si se aísla convenientemente de la presentación puede reutilizarse para otras interfaces de servicios web, sindicación RSS, etc.

Y a ti seguro que se te ocurren utilidades más específicas, prácticas y reutilizables.

Comentarios
1 Fernando
26 enero 2006, 09:08

Genial artículo Pau :)

De hecho, creo que una de las claves del éxito de Ruby on Rails es que adopta esta arquitectura de diseño de una forma muy sencilla y clara.

Además, da gusto trabajar así, con cada cosa en su sitio y atendiendo a su función.


2 Jorge Francisco
27 enero 2006, 05:37

El articulo me ha parecido muy bueno y por ello me he replanteado un proyecto. Gracias.


Acerca - Contacto - Información legal y técnica - Condiciones de uso - Noticias sobre el mundo del Desarrollo de Software.