Modelovistacontrolador
Un diagrama sencillo que muestra la relacin entre el modelo, la vista y el controlador. Nota: las
lneas slidas indican una asociacin directa, y las punteadas una indirecta (por ejemplo, patrn
Observer).
El modelovistacontrolador (MVC) es un patrn de arquitectura de software que separa
los datos y la lgica de negocio de una aplicacin de la interfaz de usuario y el mdulo
encargado de gestionar los eventos y las comunicaciones. Para ello MVC propone la
construccin de tres componentes distintos que son el modelo, la vista y el controlador,
es decir, por un lado define componentes para la representacin de la informacin, y por
otro lado para la interaccin del usuario.1 2 Este patrn de arquitectura de software se basa
en las ideas de reutilizacin de cdigo y la separacin de conceptos, caractersticas que
buscan facilitar la tarea de desarrollo de aplicaciones y su posterior mantenimiento. 3 4
ndice
1Historia
2Descripcin del patrn
o
2.1Interaccin de los componentes
2.2MVC y bases de datos
3Uso en aplicaciones Web
4Frameworks MVC
5Vase tambin
6Referencias
7Enlaces externos
Historia[editar]
El patrn MVC fue una de las primeras ideas en el campo de las interfaces grficas de
usuario y uno de los primeros trabajos en describir e implementar aplicaciones software en
trminos de sus diferentes funciones.5
MVC fue introducido por Trygve Reenskaug (web personal) en Smalltalk-76 durante su
visita a Xerox Parc6 7 en los aos 70 y, seguidamente, en los aos 80, Jim Althoff y otros
implementaron una versin de MVC para la biblioteca de clases de Smalltalk-80. 8 Solo
ms tarde, en 1988, MVC se expres como un concepto general en un artculo 9 sobre
Smalltalk-80.
En esta primera definicin de MVC el controlador se defina como "el mdulo que se
ocupa de la entrada" (de forma similar a como la vista "se ocupa de la salida"). Esta
definicin no tiene cabida en las aplicaciones modernas en las que esta funcionalidad es
asumida por una combinacin de la 'vista' y algn framework moderno para desarrollo. El
'controlador', en las aplicaciones modernas de la dcada de 2000, es un mdulo o una
seccin intermedia de cdigo, que hace de intermediario de la comunicacin entre el
'modelo' y la 'vista', y unifica la validacin (utilizando llamadas directas o el "observer" para
desacoplar el 'modelo' de la 'vista' en el 'modelo' activo10 ).
Algunos aspectos del patrn MVC han evolucionado dando lugar a ciertas variantes del
concepto original, ya que "'las partes del MVC clsico realmente no tienen sentido para los
clientes actuales":11
HMVC (MVC Jerrquico)
MVA (Modelo-Vista-Adaptador)
MVP (Modelo-Vista-Presentador)
MVVM (Modelo-Vista Vista-Modelo)
... y otros que han adaptado MVC a diferentes contextos.
Descripcin del patrn[editar]
Una tpica colaboracin entre los componentes de un MVC
De manera genrica, los componentes de MVC se podran definir como sigue:
El Modelo: Es la representacin de la informacin con la cual el sistema opera, por
lo tanto gestiona todos los accesos a dicha informacin, tanto consultas como
actualizaciones, implementando tambin los privilegios de acceso que se hayan
descrito en las especificaciones de la aplicacin (lgica de negocio). Enva a la 'vista'
aquella parte de la informacin que en cada momento se le solicita para que sea
mostrada (tpicamente a un usuario). Las peticiones de acceso o manipulacin de
informacin llegan al 'modelo' a travs del 'controlador'.12
El Controlador: Responde a eventos (usualmente acciones del usuario) e invoca
peticiones al 'modelo' cuando se hace alguna solicitud sobre la informacin (por
ejemplo, editar un documento o un registro en una base de datos). Tambin puede
enviar comandos a su 'vista' asociada si se solicita un cambio en la forma en que se
presenta el 'modelo' (por ejemplo, desplazamiento o scroll por un documento o por los
diferentes registros de una base de datos), por tanto se podra decir que el
'controlador' hace de intermediario entre la 'vista' y el 'modelo' (vase Middleware).
La Vista: Presenta el 'modelo' (informacin y lgica de negocio) en un formato
adecuado para interactuar (usualmente la interfaz de usuario) por tanto requiere de
dicho 'modelo' la informacin que debe representar como salida.
Interaccin de los componentes[editar]
Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo de control que
se sigue generalmente es el siguiente:
1. El usuario interacta con la interfaz de usuario de alguna forma (por ejemplo, el
usuario pulsa un botn, enlace, etc.)
2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificacin de
la accin solicitada por el usuario. El controlador gestiona el evento que llega,
frecuentemente a travs de un gestor de eventos (handler) o callback.
3. El controlador accede al modelo, actualizndolo, posiblemente modificndolo de
forma adecuada a la accin solicitada por el usuario (por ejemplo, el controlador
actualiza el carro de la compra del usuario). Los controladores complejos estn a
menudo estructurados usando un patrn de comando que encapsula las acciones
y simplifica su extensin.
4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de
usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada
para el usuario donde se reflejan los cambios en el modelo (por ejemplo, produce
un listado del contenido del carro de la compra). El modelo no debe tener
conocimiento directo sobre la vista. Sin embargo, se podra utilizar el
patrn Observador para proveer cierta indireccin entre el modelo y la vista,
permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto
vista puede registrarse con el modelo y esperar a los cambios, pero aun as el
modelo en s mismo sigue sin saber nada de la vista. Este uso del
patrn Observador no es posible en las aplicaciones Web puesto que las clases
de la vista estn desconectadas del modelo y del controlador. En general el
controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la
orden a la vista para que se actualice. Nota: En algunas implementaciones la vista
no tiene acceso directo al modelo, dejando que el controlador enve los datos del
modelo a la vista. Por ejemplo en el MVC usado por Apple en su framework
Cocoa. Suele citarse como Modelo-Interface-Control, una variacin del MVC ms
puro
5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el
ciclo nuevamente....
MVC y bases de datos[editar]
Muchos sistemas informticos utilizan un Sistema de Gestin de Base de Datos para
gestionar los datos que debe utilizar la aplicacin; en lneas generales del MVC dicha
gestin corresponde al modelo. La unin entre capa de presentacin y capa de
negocio conocido en el paradigma de la Programacin por capas representara la
integracin entre la Vista y su correspondiente Controlador de eventos y acceso a datos,
MVC no pretende discriminar entre capa de negocio y capa de presentacin pero si
pretende separar la capa visual grfica de su correspondiente programacin y acceso a
datos, algo que mejora el desarrollo y mantenimiento de la Vista y el Controlador en
paralelo, ya que ambos cumplen ciclos de vida muy distintos entre s.
Uso en aplicaciones Web[editar]
Aunque originalmente MVC fue desarrollado para aplicaciones de escritorio, ha sido
ampliamente adaptado como arquitectura para disear e implementar aplicaciones web en
los principales lenguajes de programacin. Se han desarrollado multitud de frameworks,
comerciales y no comerciales, que implementan este patrn (ver apartado siguiente
"Frameworks MVC"); estos frameworks se diferencian bsicamente en la interpretacin de
como las funciones MVC se dividen entre cliente y servidor.13
Los primeros frameworks MVC para desarrollo web planteaban un enfoque de cliente
ligero en el que casi todas las funciones, tanto de la vista, el modelo y el controlador
recaan en el servidor. En este enfoque, el cliente manda la peticin de
cualquier hiperenlace o formulario al controlador y despus recibe de la vista una