Está en la página 1de 5

12/5/2015

Modelovistacontrolador - Wikipedia, la enciclopedia libre

Modelovistacontrolador
De Wikipedia, la enciclopedia libre
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

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).

ndice
1 Historia
2 Descripcin del patrn
2.1 Interaccin de los componentes
2.2 MVC y bases de datos
3 Uso en aplicaciones Web
4 Frameworks MVC
5 Vase tambin
6 Referencias
7 Enlaces externos

Historia
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 (http://heim.ifi.uio.no/~trygver)) 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 Smalltalk80.8 Solo ms tarde, en 1988, MVC se expres como un concepto general en un artculo9 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


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
http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

1/5

12/5/2015

Modelovistacontrolador - Wikipedia, la enciclopedia libre

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


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.
Una tpica colaboracin entre los
La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario
componentes de un MVC
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


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 elControlador en paralelo, ya que ambos
cumplen ciclos de vida muy distintos entre s.

Uso en aplicaciones Web


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 pgina completa y actualizada (u otro documento); tanto el modelo como el controlador (y buena
parte de la vista) estn completamente alojados en el servidor. Como las tecnologas web han madurado, ahora existen frameworks como
JavaScriptMVC, Backbone o jQuery14 que permiten que ciertos componentes MVC se ejecuten parcial o totalmente en el cliente (vase
AJAX).

Frameworks MVC
Lenguaje

Licencia

Objective
Apple (http://developer.apple.com)
C
http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

Nombre
Cocoa
2/5

12/5/2015

Modelovistacontrolador - Wikipedia, la enciclopedia libre

Ruby

MIT (http://opensource.org/licenses/mit-license.php)

Ruby on Rails

Ruby

MIT (http://opensource.org/licenses/mit-license.php)

Merb

Ruby

MIT (http://opensource.org/licenses/mit-license.php)

Ramaze

Ruby

MIT (http://opensource.org/licenses/mit-license.php)

Rhodes

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Grails

Java

GPL (http://www.opensource.org/licenses/gpl-license.php)

Interface Java Objects (http://nt.tusoporte.es/IjoProject)

Java

LGPL (http://www.martincordova.com)

Framework Dinmica

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Struts

Java

Apache (http://beehive.apache.org/)

Beehive

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Spring

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Tapestry (http://tapestry.apache.org/)

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Aurora (http://www.auroramvc.org)

Java

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

JavaServerFaces (http://java.sun.com/javaee/javaserverfaces/)

JavaScript GPLv3 (http://www.gnu.org/copyleft/gpl.html)

Sails.JS (http://sailsjs.org/)

JavaScript GPLv3 (http://www.gnu.org/copyleft/gpl.html)

ExtJS 4 (http://www.sencha.com/products/extjs/)

JavaScript

MIT
(https://github.com/angular/angular.js/blob/master/LICENSE)

AngularJS (https://angularjs.org/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Mojolicious (http://mojolicio.us/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Catalyst (http://www.catalystframework.org/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

CGI::Application (http://cgiapp.erlbaum.net/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Gantry Framework (http://usegantry.org/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Jifty (http://jifty.org/view/HomePage)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Maypole (http://maypole.perl.org/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

OpenInteract2 (http://www.openinteract.org/)

Perl

Comercial

PageKit (http://pagekit.org/)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

Cyclone 3 (http://www.cyclone3.org/home)

Perl

GPL (http://www.opensource.org/licenses/gpl-license.php)

CGI::Builder (http://search.cpan.org/perldoc?CGI::Builder)

PHP

[1] (http://www.yiiframework.com/license/)

Yii (http://www.yiiframework.com/)

PHP

MIT (http://opensource.org/licenses/mit-license.php)

Laravel (http://laravel.com/)

PHP

GPL (http://www.opensource.org/licenses/gpl-license.php)

Self Framework ( php5, MVC, ORM, Templates, I18N,


Mltiples
DB)
(http://sites.google.com/site/phpframeworkpoo/downloadframework)

PHP

LGPL (http://www.opensource.org/licenses/lgpl-license.php)

ZanPHP (http://www.zanphp.com/)

PHP

[2] (http://stefanframework.com)

[Stefan Framework]

PHP

LGPL (http://www.opensource.org/licenses/lgpl-license.php)

Tlalokes (http://tlalokes.org/)

PHP

GPL (http://www.siaempresarial.com/mvc/mvc-license.php)

SiaMVC (http://siaempresarial.com/siamvc/)

PHP

LGPL (http://www.opensource.org/licenses/lgpl-license.php)

Agavi (http://agavi.org/)

PHP

BSD (http://www.opensource.org/licenses/bsd-license.php)

Zend Framework (http://framework.zend.com/)

PHP

MIT (http://www.opensource.org/licenses/mit-license.php)

CakePHP (http://www.cakephp.org/)

PHP

GNU/GPL (http://www.opensource.org/licenses/gpl-license.php) KumbiaPHP (http://www.kumbiaphp.com/)

PHP

MIT (http://www.symfony-project.org/license)

PHP

MIT (http://www.symfony-project.com/licenses/mit-license.php) QCodo (http://qcodo.com/)

PHP

GNU/GPL (http://www.opensource.org/licenses/gpl-license.php) CodeIgniter (http://codeigniter.com/)

PHP

GNU/GPL (http://www.opensource.org/licenses/gpl-license.php) Polka-PHP (https://github.com/rotela/polka-php)

PHP

BSD (http://kohanaframework.org/)

PHP

MPL
1.1
(http://php4e.codeman.cl/index.php? PHP4ECore (http://php4e.codeman.cl/)
SECCION=msg&COD=59&MODULE=home)

http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

Symfony (http://www.symfony.com/)

Kohana (http://kohanaframework.org/)

3/5

12/5/2015

Modelovistacontrolador - Wikipedia, la enciclopedia libre

PHP

BSD (http://www.pradosoft.com/)

PRADO (http://www.pradosoft.com/)

PHP

GNU (http://www.practico.org/)

Practico (http://www.practico.org/)

PHP

GNU (http://www.flavorphp.com/)

FlavorPHP (http://www.flavorphp.com/)

PHP

Apache 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

Yupp PHP Framework (http://code.google.com/p/yupp/)

PHP

BSD (http://www.yiiframework.com/license/)

Yii PHP Framework (http://www.yiiframework.com/)

PHP

GPL (http://www.logick.es)

Logick PHP Framework (http://www.logick.es/)

PHP

GPL (http://www.opensource.org/licenses/gpl-license.php)

Osezno PHP Framework

PHP

MIT (https://github.com/alrik11es/sPHPf/blob/master/license.txt)

(sPHPf)
Simple
(http://sphpf.coldstarstudios.com/)

PHP

GNU/GPL
(http://www.gvpontis.gva.es/cast/gvhidragvHidra (http://www.gvhidra.org)
herramienta/gvhidra-que-es-gvhidra/)

Python

ZPL (http://www.zope.org/Resources/License/)

Zope3 (http://wiki.zope.org/zope3/MVC)

Python

Varias (http://docs.turbogears.org/1.0/License)

Turbogears (http://www.turbogears.org/)

Python

GPL (http://web2py.com/examples/default/license)

Web2py (http://web2py.com/)

Python

BSD (http://pylonshq.com/project/pylonshq/browser/LICENSE) Pylons (http://pylonshq.com/)

Python

BSD
Django
(http://code.djangoproject.com/browser/django/trunk/LICENSE)

.NET

Castle Project (http://www.castleproject.org/index.html)

MonoRail (http://www.castleproject.org/monorail/index.html)

.NET

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Spring.NET (http://www.springframework.net/)

.NET

Apache (http://www.apache.org/licenses/LICENSE-2.0.html)

Maverick.NET (http://mavnet.sourceforge.net/)

.NET

MS-PL (http://www.opensource.org/licenses/ms-pl.html)

ASP.NET MVC (http://www.asp.net/mvc)

.NET

Microsoft
Patterns
(http://msdn.microsoft.com/practices/)

User
Interface
Process
(UIP)
Application Block
(http://msdn.microsoft.com/practices/compcat/default.aspx?
pull=/library/en-us/dnpag/html/uipab.asp)

AS3

Adobe
Open
Source Cairngorm
(http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm) (http://opensource.adobe.com/wiki/display/cairngorm/Cairngorm)

AS3
Flex

y MIT
License
license.php)

&

Practices

(http://www.opensource.org/licenses/mit-

PHP

Framework

CycleFramework (http://code.google.com/p/cycleframework/)

Vase tambin
Ingeniera Tcnica en Informtica de Gestin
Ingeniera de Software

Referencias
1. "More deeply, the framework exists to separate the representation of information from user interaction." The DCI Architecture: A New Vision of
Object-Oriented Programming (http://www.artima.com/articles/dci_vision.html) - Trygve Reenskaug and James Coplien - March 20, 2009.
2. "... the user input, the modeling of the external world, and the visual feedback to the user are explicitly separated and handled by three types of
object." Applications Programming in Smalltalk-80(TM):How to use Model-View-Controller (MVC) (http://st-www.cs.illinois.edu/users/smarch/stdocs/mvc.html).
3. Simple Example of MVC (Model View Controller) Design Pattern for Abstraction (http://www.codeproject.com/Articles/25057/Simple-Exampleof-MVC-Model-View-Controller-Design)
4. Best MVC Practices (http://www.yiiframework.com/doc/guide/1.1/en/basics.best-practices)
5. http://c2.com/cgi/wiki?ModelViewControllerHistory Historia del Modelo-Vista-Controlador
6. Notes and Historical documents (http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html) from Trygve Reenskaug, inventor of MVC.
7. "A note on DynaBook requirements", Trygve Reenskaug, 22 March 1979, SysReq.pdf (http://folk.uio.no/trygver/1979/sysreq/SysReq.pdf).
8. [http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html How to use Model-View-Controller (MVC)
9. Krasner, Glenn E.; Stephen T. Pope (Aug/Sep de 1988). A cookbook for using the model-view controller user interface paradigm in Smalltalk80 (http://dl.acm.org/citation.cfm?id=50757.50759). The JOT (SIGS Publications). Also published as "A Description of the Model-ViewController
User
Interface
Paradigm
in
the
Smalltalk-80
System
(http://www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf)" (Report), ParcPlace Systems; Retrieved 2012-06-05.
10. http://msdn.microsoft.com/en-us/library/ff649643.aspx
11. The evolution of MVC and other UI architectures (http://martinfowler.com/eaaDev/uiArchs.html) from Martin Fowler.
12. How to Use ModelViewController (MVC) (http://st-www.cs.illinois.edu/users/smarch/st-docs/mvc.html).
13. Leff, Avraham; James T. Rayfield (September 2001). Web-Application Development Using the Model/View/Controller Design Pattern. IEEE
Enterprise Distributed Object Computing Conference. pp. 118127.
14. MCV en javascript con AJAX y jQuery (http://www.cristalab.com/tutoriales/mvc-en-javascript-con-ajax-y-jquery-parte-2-controladores-c95719l/)
http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

4/5

12/5/2015

Modelovistacontrolador - Wikipedia, la enciclopedia libre

Enlaces externos
Desarrollando una aplicacin Java MVC paso a paso (http://www.re-orientation.com/manual-creacion-aplicacion-java-MVC)
Introduccin a ASP.NET MVC (http://cup-coffe.blogspot.com/2010/02/introduccion-al-aspnet-mvc.html)
Texto introductorio El maldito libro de los descarrilados- Herrera - 2010 (http://yottabi.com/mld.pdf) Ruby on Rails, MVC
Desarrollando una aplicacin Spring MVC paso a paso (http://www.davidmarco.es/spring-mvc)
Definicin bsica del MVC (http://www.lab.inf.uc3m.es/~a0080802/RAI/mvc.html)
Ejemplo de MVC en Gambas3. Programacin Visual en gnu/linux (http://jsbsan.blogspot.com.es/2013/08/modelo-vista-controlador-mvcejemplos.html)
https://www.youtube.com/watch?v=NU1QriNhW6g Software Desarrollado con MVC .NET
Obtenido de http://es.wikipedia.org/w/index.php?title=Modelovistacontrolador&oldid=82211749
Categora: Arquitectura de software
Esta pgina fue modificada por ltima vez el 4 may 2015 a las 16:40.
El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0; podran ser aplicables clusulas adicionales.
Lanse los trminos de uso para ms informacin.
Wikipedia es una marca registrada de la Fundacin Wikimedia, Inc., una organizacin sin nimo de lucro.

http://es.wikipedia.org/wiki/Modelo%E2%80%93vista%E2%80%93controlador

5/5

También podría gustarte