El Patrón MVC. Separando responsabilidades para brindar flexibilidad.

En general, un patrón es la descripción de una solución a un problema común. En el desarrollo de software se utilizan mucho los patrones, ya que nos permiten aprovechar y replicar las soluciones que los expertos han generado. Uno de los patrones más comunes y utilizados en las aplicaciones de software modernas es el patrón Modelo-Vista-Controlador (Model-View-Controller en inglés), conocido por sus siglas como MVC. Alfredo López nos explica cuál es el problema que resuelve este patrón y cómo es que lo logra.

En muchas ocasiones nos encontramos desarrollando aplicaciones donde toda las reglas del negocio, accesos a fuentes de datos y hasta código de presentación se encuentran en una sola clase, librería o, peor aún, en una sola página (hablando de JSP, ASP o similar). La experiencia nos ha demostrado que estas aplicaciones son muy difíciles de mantener y casi imposibles de reutilizar adecuadamente.

Solución
El patrón MVC consiste en separar las diferentes responsabilidades en una aplicación, en elementos de tres tipos:
• Modelos que contengan el estado (datos) y los mecanismos para alterarlo.
• Vistas que desplieguen información o la comuniquen a otros sistemas.
• Controles que administren los eventos que afectan a los modelos y escojan las vistas adecuadas para desplegar los resultados.

Esto se aprecia en la siguiente figura.

Aplicaciones
El MVC es muy útil cuando tenemos componentes o subsistemas con una o más de las siguientes características:
• Requiere desplegar su información en diferentes tipos de clientes. La figura 2 muestra un ejemplo de un sistema que requiere proveer información a través de clientes web, móviles, applets y web services.

• Tiene múltiples comportamientos debido a distintos usos que se puedan dar a la lógica de negocios.
• Se requiere readaptar o reutilizar bajo distintas circunstancias con un mínimo de trabajo adicional.

Ventajas y desventajas
El patrón MVC proporciona una forma excelente de hacer que un elemento sea flexible y adaptable a distintas situaciones. Esta flexibilidad puede ser aprovechada ya sea de manera estática o dinámica. Estática cuando se agregan nuevas clases de vistas o controladores, y dinámica cuando los objetos de vista o controlador se escogen en tiempo de ejecución.

Usualmente, el mayor desafío del MVC consiste en determinar la base; es decir, definir interfaces adecuadas para que interactúen modelo, vistas y controlador. A menudo, como en la mayor parte del software, un elemento MVC se desarrolla para satisfacer un conjunto específico de necesidades. Es por esto que se necesita visión y un análisis cuidadoso para implementar el elemento de forma que no se impongan restricciones específicas a una aplicación sobre él.

Variaciones del Patrón
Las variaciones del MVC suelen girar en torno a las diferentes opciones de implementación para las vistas.

• Push vs. Pull.– Un esquema “push” (empujar) es aquel en que el modelo envía actualizaciones de datos hacia las vistas, mientras que “pull” (jalar) es cuando las vistas obtienen información del modelo conforme lo van requiriendo.
• Vistas múltiples.– Un modelo puede proporcionar información a más de una vista. Esto resulta muy útil en algunas implementaciones de interfaces gráficas, porque los mismos datos deben llevar algunas veces a distintas representaciones.
• Vistas de sólo lectura.– No todas las vistas necesitan un controlador. Algunas proporcionaran sólo una represtación visual de los datos del modelo, pero no soportan ningún cambio en el modelo.

Con esto concluimos nuestro estudio acerca de este patrón. Esperamos que les traiga beneficios en sus próximos proyectos.

Referencia:
Stelting, Stephen & Maassen, Olav. Applied Java Patterns.
Prentice Hall, 2002