jueves, 27 de noviembre de 2008

Patrones Arquitectónicos: el MVC

Las arquitecturas lógicas para el diseño de aplicaciones web se dividen entre dos patrones o modelos: el Cliente-Servidor y el MVC (Modelo-Vista-Controlador). La primera, más tradicional y clásica en sistemas con un tiempo de vida largo, y la segunda, más de moda en la actualidad por el paradigma que propone. Para este post nos vamos a centrar en esta última, dado que su uso está extendidísimo y es la más indicada para aplicaciones web.

El patrón MVC o Modelo-Vista-Controlador basa su robustez en que la lógica de la interfaz de usuario varía mucho más rápido que la lógica de negocio y almacenamiento, con lo que pretende separar las capas, de tal forma que un cambio en una de ellas no tenga un impacto elevado en otra. Está dividida en tres capas o niveles:

Modelo: gestiona los datos y la lógica del negocio.
  • Accede a la capa de almacenamiento de datos. Independencia del modelo con el sistema de almacenamiento.
  • Define las reglas de negocio, la funcionalidad del sistema.
  • Registro de las vistas y controladores de la aplicación.
Vista: presentan la información del sistema al usuario y generar los eventos de la interacción con éste.
  • Captura eventos del usuario y se los envía al sistema a través del controlador.
  • Recibe mandatos del controlador y muestra información al usuario.
Controlador: recibe eventos del usuario, invoca servicios ofrecidos por el modelo y selecciona la vista adecuada para presentar los resultados.

En la siguiente figura se aprecia la interacción entre los distintos componentes. Hay versiones o apreciaciones del MVC en las que se permite la conexión entre la Vista y el Modelo, sobre todo para operaciones muy simples que apenas tengan complejidad o impacto en la lógica del sistema. Nosotros creemos que, si es precisamente un patrón que trata de separar estas capas de negocio, es mejor que no existan tal relación, teniendo que pasar todas las peticiones a través del Controlador. Y este argumento se refuerza en las aplicaciones Web, donde la Vista suele estar distribuida y existe un altísimo grado de concurrencia en el acceso a los datos del sistema.

Por lo anterior, el flujo de control que sigue este patrón es:
  1. El usuario interacciona con la interfaz (Vista) y genera un evento.
  2. El controlador captura dicho evento y lo gestiona.
  3. El controlador accede al Modelo y lo actualiza.
  4. El controlador invoca la Vista necesaria para presentar los nuevos datos al usuario.
En función de la tecnología en la que estéis desarrollando el diseño existen numerosos frameworks para implementar el MVC, por ejemplo Struts para Java, CakePHP para PHP y Spring.NET para .NET.

No hay comentarios: