Pages - Menu

sábado, 24 de mayo de 2014

Patrones de diseño: MVC

Aquí tenemos otro de los patrones arquitectónicos más utilizados, el patrón Modelo-Vista-Controlador (MVC). Este patrón, nos permite separar la lógica de la aplicación de la interfaz de usuario, permitiéndonos modificar la interfaz de usuario sin por ello modificar la lógica de nuestro programa, e incluso crear varias interfaces de usuario para distintos dispositivos.

Motivación

Imaginemos una aplicación sencilla, pero que queremos que se pueda ejecutar en distintos tipos de plataformas como smartphones, tablets, etc.; y cada una de estas plataformas tienen exigencias diferentes en cuanto a interfaces de usuario. Si nuestra interfaz de usuario estuviera intensamente acoplada a la lógica de la aplicación, tendríamos casi que crear una aplicación entera para cada dispositivo. El patrón MVC, pretende solucionar esta situación y otras parecidas.

Estructura

La aplicación del patrón consiste en dividir la aplicación en tres partes:

  • Modelo: que tendrá la lógica de la aplicación común a todas las interfaces de usuario.
  • Vista: que contendrá todo lo relacionado con lo que se muestra al usuario.
  • Controlador: será el encargado de comunicar los eventos de usuario al modelo y actualizar la vista.
Estas partes, forman la estructura que se ve a continuación:
Estructura Clásica MVC
Como se ve en la figura, el controlador y la vista se conocen directamente y conocen al modelo, pero este no tiene ningún tipo de dependencia con la interfaz de usuario. Esto nos permite, que el modelo nunca se vea afectado por los cambios en el controlador o la vista, dándonos la posibilidad de poder crear varias interfaces de usuario, una para plataforma en la que queramos implementar la aplicación y mostrar la que necesitemos en cada momento.
Existen dos modos de implementar el patrón:
  • Pasivo: el controlador llama a métodos del modelo simplemente.
  • Activo: el modelo puede indicar a la vista que actualice datos. Esto se consigue aplicando el patrón observador (aún no mostrado en este blog) en el que el observador es la vista y el observado es el modelo, de esta manera no se tiene dependencia entre modelo y vista.

Ventajas y Desventajas

Ventajas

  • Facilita el mantenimiento de la aplicación al separa claramente la interfaz de usuario.
  • Permite modificar y/o cambiar la interfaz de usuario sin modificar la lógica de la aplicación.
  • Reutilización de los componentes al poder usar el modelo con distintos modelos.
  • Desarrollos más escalables.

Desventajas

  • Aumenta la complejidad del sistema.

Aplicabilidad

Hoy día el patrón MVC se usa en casi todos las aplicaciones que requieren de una interfaz de usuario, sobre todo cuando hay una gran heterogeneidad entre las necesidades de interfaz en los dispositivos donde se van a ejecutar. Algunas aplicaciones son:
  • Frameworks para el desarrollo de aplicaciones web como Symphony o Ruby on rails.
  • Aplicaciones de gestión.
  • Desarrollo de videojuegos.
En muchos casos, en vez de usar MVC, se usa una variante de este patrón que se adapte más al problema que se desea abordar.

Colaboraciones

Cuando se realiza un evento de usuario, este se envía al controlador. Desde el controlador se llama a las funciones del modelo que correspondan para ese evento y recoge los resultados, los cuales envía a las vista para actualizarla. Este proceso, es el mostrado en la siguiente figura.
Secuencia de un evento MVC
Esta es una de las posibles formas, pero existen distintas implementaciones, como por ejemplo, que la vista se encargue de obtener los valores por si mismo del modelo o que el modelo avise a la vista de actualizarse(MVC Activo).

No hay comentarios:

Publicar un comentario