26 de Junio, 2005

Patrones de diseño y la programación artística

No soy un analista, si acaso más bien un analista/programador. ¿Diferencias? El tamaño de los sistemas de información a los que me puedo enfrentar (aunque el arquitecto creo que no es un analista, estas cosas se suelen confundir).

Llevo programando muchos años, así que tengo cierta experiencia en programación estructurada (imperativa), y algo menos en orientada a objetos (no es habitual encontrar problemas que se resuelvan empleando este paradigma).

Esto me lleva a planificar los proyectos y a desarrollar de forma más o menos modular. A estas alturas una de mis obsesiones es maximizar el código reutilizable, pero reconozco que tengo limitaciones. Una de ellas: cero en arquitectura de software.

Ni siquiera llegué cursar la asignatura, así que solo sé lo que es por haber leído cosas por mi cuenta, y algunas son poco esclarecedoras (menos mal que la versión en inglés está mejor).

Bueno, resumamos mucho: la arquitectura del software es un conjunto abstracto de patrones que nos pueden guiar en diseño de grandes sistemas. Vamos, aplicaciones importantes (no he hecho nunca ninguna).

No quiero profundizar más en el tema de la arquitectura, sino más bien echarle un ojo a un patrón de diseño que está al alcance de cualquiera (al menos en cuanto a comprenderlo, creo). La criatura se llama Modelo Vista Controlador (MVC, en inglés Model View Controler).

El concepto es fácil de coger. Definimos una arquitectura de tres capas: Modelo, Vista y Controlador (ahora que alguien me diga que no se veía venir :D).

Vamos a describir un poco cada parte:

  • Modelo: se trata de las estructuras de datos, los datos propiamente dichos y la lógica de la aplicación (procesos que afectan a los datos). Podríamos decir que es cómo funciona la aplicación.
  • Vista: es la interfaz que ve el usuario. Dependiendo de la implementación, esta interfaz se genera en base a los datos que se obtienen directamente del modelo o con la información que proporciona el controlador. Podríamos decir que es la visualización del modelo.
  • Controlador: es la capa que se encarga de procesar los eventos. En base a lo que indica el usuario, produce modificaciones en el modelo (y por consiguiente en la vista). Podríamos decir que es la traducción de las acciones del usuario en cambios de estado del modelo.
MVC
Posible representación de MVC

Ahora veamos en qué forma puede esta arquitectura facilitar mi trabajo, realizando aplicaciones web principalmente.

Las aplicaciones basadas en web son especialmente complejas por el formato de la plataforma y por la estructura de pregunta / respuesta. A poco que nos paremos a pensar veremos cierta relación entre una aplicación web y algunas de las capas del patrón: la vista es la web que ve el usuario en su navegador, el controlador es el código que interpreta el formulario o la petición del navegador y lo traduce a una llamada a una función del modelo, para finalmente devolver una vista (página web).

Pues cualquiera que haya hecho una aplicación web sabrá que esto no se suele hacer así ;), probablemente por los vicios que se adquieren cuando se emplean lenguajes como PHP, que permiten con demasiada facilidad mezclar las tres capas (código dentro del HTML, HTML dentro del código, con llamadas a la base de datos por todas partes :D).

La consecuencia de esta mezcla es que resulta muy complicado mantener las aplicaciones, reutilizar código es una pesadilla (hacer copy & paste no cuenta como reutilizar código :D), y cada proyecto acaba siendo un nuevo Frankenstein en nuestra cuenta particular.

Las ventajas que obtenemos aplicando la arquitectura MVC son significativas, sobretodo trabajando con la plataforma web. Como ya he comentado, siempre tendremos una llamada al controlador (petición del navegador), que accederá al modelo y devolverá una vista (página web).

Las arquitectura de este estilo prometen siempre los mismo: independencia de las capas. Lo que a su vez nos lleva a... ¡reutilizar código!

Obviamente al modelo se reutilizará solo cuando se trate de la misma aplicación, aunque cambiando vistas e incluso el controlador también puede tener sentido (por ejemplo, si empleamos pegamento como xml-rpc o soap, podríamos hacer una vista + controlador que no fuera web).

El controlador lo podremos reutilizar con toda seguridad. El controlador de un listado en forma tabular será siempre el mismo (ordenar por columna, mostrar siguiente o anterior página, etc), ya que la parte de mostrar la información recaerá en una vista y las modificaciones de los datos sobre el modelo.

Por último las vistas serán como lo que es CSS a HTML: con los mismos datos, elegiremos la representación que más nos interese (por ejemplo interesante cuando se desea generar un PDF, sería otra vista).

Vamos, que la idea me ha convencido bastante. Voy a intentar consumir toda la literatura que pueda este verano para poner en práctica esta arquitectura cuando llegue el momento. Para ir abriendo boca: The Model-View-Controller (MVC) Design Pattern for PHP de Tony Marston (ojo al resto de la web, que este tío es impresionante).

Anotación por Juan J. Martínez.

Hay 1 comentario

Gravatar

Como programador amateur en php acabo de encontrar interesantísimo todo el modelo MVC, bien es cierto que tratamos de reutilizar código en muchas ocasiones conformándonos con el c&p que como bien dices, es bastante sucio.

Mirando por encima el enlace que comentas, la estructura del modelo y su puesta en práctica solo puedo decir que todo lo que he programado hasta ahora es una gran bazofia.

Es posible que haya semidescubierto el encanto de la programación al leer esta anotación. El tiempo lo dirá.

por r0sk, en 2005-06-27 01:01:47

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.