modelo–vista–controlador
TRANSCRIPT
![Page 1: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/1.jpg)
Modelovistacontrolador 1
Modelo–vista–controlador
Un diagrama sencillo que muestra la relación entre el modelo, la vista y elcontrolador. Nota: las líneas sólidas indican una asociación directa, y las punteadas
una indirecta (por ejemplo, patrón Observer).
El modelo–vista–controlador (MVC) esun patrón de arquitectura de software quesepara los datos y la lógica de negocio deuna aplicación de la interfaz de usuario y elmódulo encargado de gestionar los eventosy las comunicaciones. Para ello MVCpropone la construcción de trescomponentes distintos que son el modelo, lavista y el controlador, es decir, por un ladodefine componentes para la representaciónde la información, y por otro lado para lainteracción del usuario[1][2]. Este patrón dearquitectura de software se basa en las ideasde reutilización de código y la separación de conceptos, características que buscan facilitar la tarea de desarrollo deaplicaciones y su posterior mantenimiento[3][4].
HistoriaEl patrón MVC fue una de las primeras ideas en el campo de las interfaces gráficas de usuario y uno de los primerostrabajos en describir e implementar aplicaciones software en términos de sus diferentes funciones[5].MVC fue introducido por Trygve Reenskaug (web personal [6]) en Smalltalk-76 durante su visita a Xerox Parc[7][8]
en los años 70 y, seguidamente, en los años 80, Jim Althoff y otros implementaron una versión de MVC para labiblioteca de clases de Smalltalk-80[9]. Sólo más tarde, en 1988, MVC se expresó como un concepto general en unartículo[10] sobre Smalltalk-80.En esta primera definición de MVC el controlador se definía como "el módulo que se ocupa de la entrada" (deforma similar a como la vista "se ocupa de la salida"). Esta definición no tiene cabida en las aplicaciones modernasen las que esta funcionalidad es asumida por una combinación de la 'vista' y algún framework moderno paradesarrollo. El 'controlador', en las aplicaciones modernas de la década de 2000, es un módulo o una secciónintermedia de código, que hace de intermediario de la comunicación entre el 'modelo' y la 'vista', y unifica lavalidación (utilizando llamadas directas o el "observer" para desacoplar el 'modelo' de la 'vista' en el 'modelo'activo[11]).Algunos aspectos del patrón MVC han evolucionado dando lugar a ciertas variantes del concepto original, ya que"'las partes del MVC clásico realmente no tienen sentido para los clientes actuales"[12]:• HMVC (MVC Jerárquico)• MVA (Modelo-Vista-Adaptador)• MVP (Modelo-Vista-Presentador)• MVVM (Modelo-Vista Vista-Modelo)•• ... y otros que han adaptado MVC a diferentes contextos.
![Page 2: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/2.jpg)
Modelovistacontrolador 2
Descripción del patrón
Una típica colaboración entre los componentes de un MVC
De manera genérica, los componentes de MVC sepodrían definir como sigue:• El Modelo: Es la representación de la información
con la cual el sistema opera, por lo tanto gestionatodos los accesos a dicha información, tantoconsultas como actualizaciones, implementandotambién los privilegios de acceso que se hayandescrito en las especificaciones de la aplicación(lógica de negocio). Envía a la 'vista' aquella partede la información que en cada momento se lesolicita para que sea mostrada (típicamente a unusuario). Las peticiones de acceso o manipulaciónde información llegan al 'modelo' a través del'controlador'[13].
• El Controlador: Responde a eventos (usualmenteacciones del usuario) e invoca peticiones al 'modelo'cuando se hace alguna solicitud sobre la información(por ejemplo, editar un documento o un registro enuna base de datos). También puede enviar comandos a su 'vista' asociada si se solicita un cambio en la forma enque se presenta de 'modelo' (por ejemplo, desplazamiento o scroll por un documento o por los diferentes registrosde una base de datos), por tanto se podría decir que el 'controlador' hace de intermediario entre la 'vista' y el'modelo' (véase Middleware).
• La Vista: Presenta el 'modelo' (información y lógica de negocio) en un formato adecuado para interactuar(usualmente la interfaz de usuario) por tanto requiere de dicho 'modelo' la información que debe representar comosalida.
Interacción de los componentesAunque se pueden encontrar diferentes implementaciones de MVC, el flujo de control que se sigue generalmente esel siguiente:1.1. El usuario interactúa con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botón, enlace,
etc.)2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificación de la acción solicitada por el
usuario. El controlador gestiona el evento que llega, frecuentemente a través de un gestor de eventos (handler) ocallback.
3. El controlador accede al modelo, actualizándolo, posiblemente modificándolo de forma adecuada a la acciónsolicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Loscontroladores complejos están a menudo estructurados usando un patrón de comando que encapsula las accionesy simplifica su extensión.
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 podría utilizar el patrón Observador para proveer cierta indirección 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
![Page 3: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/3.jpg)
Modelovistacontrolador 3
vista. Este uso del patrón Observador no es posible en las aplicaciones Web puesto que las clases de la vista estándesconectadas del modelo y del controlador. En general el controlador no pasa objetos de dominio (el modelo) ala vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista notiene acceso directo al modelo, dejando que el controlador envíe los datos del modelo a la vista. Por ejemplo enel MVC usado por Apple en su framework Cocoa. Suele citarse como Modelo-Interface-Control, una variacióndel MVC más puro
5.5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente....
MVC y bases de datosMuchos sistemas informáticos utilizan un Sistema de Gestión de Base de Datos para gestionar los datos que debeutilizar la aplicación; en líneas generales del MVC dicha gestión corresponde al modelo. La unión entre capa depresentación y capa de negocio conocido en el paradigma de la Programación por capas representaría la integraciónentre la Vista y su correspondiente Controlador de eventos y acceso a datos, MVC no pretende discriminar entrecapa de negocio y capa de presentación pero si pretende separar la capa visual gráfica de su correspondienteprogramación y acceso a datos, algo que mejora el desarrollo y mantenimiento de la Vista y elControlador enparalelo, ya que ambos cumplen ciclos de vida muy distintos entre sí.
Uso en aplicaciones WebAunque originalmente MVC fue desarrollado para aplicaciones de escritorio, ha sido ampliamente adaptado comoarquitectura para diseñar e implementar aplicaciones web en los principales lenguajes de programación. Se handesarrollado multitud de frameworks, comerciales y no comerciales, que implementan este patrón (ver apartadosiguiente "Frameworks MVC"); estos frameworks se diferencian básicamente en la interpretación de como lasfunciones MVC se dividen entre cliente y servidor.Los primeros frameworks MVC para desarrollo web planteaban un enfoque de cliente ligero en el que casi todas lasfunciones, tanto de la vista, el modelo y el controlador recaían en el servidor. En este enfoque, el cliente manda lapetición de cualquier hiperenlace o formulario al controlador y después recibe de la vista una página completa yactualizada (u otro documento); tanto el modelo como el controlador (y buena parte de la vista) están completamentealojados en el servidor. Como las tecnologías web han madurado, ahora existen frameworks como JavaScriptMVC,Backbone o jQuery[14] que permiten que ciertos componentes MVC se ejecuten parcial o totalmente en el cliente(véase AJAX).
Frameworks MVC
Lenguaje Licencia Nombre
Objective C Apple [15] Cocoa
Ruby MIT [16] Ruby on Rails
Ruby MIT [16] Merb
Ruby MIT [16] Ramaze
Ruby MIT [16] Rhodes
Java Apache [17] Grails
Java GPL [18] Interface Java Objects [19]
Java LGPL [20] Framework Dinámica
![Page 4: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/4.jpg)
Modelovistacontrolador 4
Java Apache [17] Struts
Java Apache [21] Beehive
Java Apache [17] Spring
Java Apache [17] Tapestry [22]
Java Apache [17] Aurora [23]
Java Apache [17] JavaServerFaces [24]
JavaScript GPLv3 [25] Sails.JS [26]
JavaScript GPLv3 [25] ExtJS 4 [27]
Perl GPL [18] Mojolicious [28]
Perl GPL [18] Catalyst [29]
Perl GPL [18] CGI::Application [30]
Perl GPL [18] Gantry Framework [31]
Perl GPL [18] Jifty [32]
Perl GPL [18] Maypole [33]
Perl GPL [18] OpenInteract2 [34]
Perl Comercial PageKit [35]
Perl GPL [18] Cyclone 3 [36]
Perl GPL [18] CGI::Builder [37]
PHP MIT [16] Laravel [38]
PHP GPL [18] Self Framework ( php5, MVC, ORM, Templates, I18N, Multiples DB) [39]
PHP LGPL [40] ZanPHP [41]
PHP LGPL [40] Tlalokes [42]
PHP GPL [43] SiaMVC [44]
PHP LGPL [40] Agavi [45]
PHP BSD [46] Zend Framework [47]
PHP MIT [48] CakePHP [49]
PHP GNU/GPL [18] KumbiaPHP [50]
PHP MIT [51] Symfony [52]
PHP MIT [53] QCodo [54]
PHP GNU/GPL [18] CodeIgniter [55]
PHP GNU/GPL [18] Polka-PHP [56]
PHP BSD [57] Kohana [57]
![Page 5: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/5.jpg)
Modelovistacontrolador 5
PHP MPL 1.1 [58] PHP4ECore [59]
PHP BSD [60] PRADO [60]
PHP GNU [61] Practico [61]
PHP GNU [62] FlavorPHP [62]
PHP Apache 2.0 [63] Yupp PHP Framework [64]
PHP BSD [65] Yii PHP Framework [66]
PHP GPL [67] Logick PHP Framework [68]
PHP GPL [18] Osezno PHP Framework
PHP MIT [69] (sPHPf) Simple PHP Framework [70]
PHP GNU/GPL [71] gvHidra [72]
Python ZPL [73] Zope3 [74]
Python Varias [75] Turbogears [76]
Python GPL [77] Web2py [78]
Python BSD [79] Pylons [80]
Python BSD [81] Django
.NET Castle Project [82] MonoRail [83]
.NET Apache [17] Spring .NET [84]
.NET Apache [17] Maverick .NET [85]
.NET MS-PL [86] ASP.NET MVC [87]
.NET Microsoft Patterns & Practices [88] User Interface Process (UIP) Application Block [89]
AS3 Adobe Open Source [90] Cairngorm [90]
AS3 y Flex MIT License [48] CycleFramework [91]
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 typesof object." Applications Programming in Smalltalk-80(TM):How to use Model-View-Controller (MVC) (http:/ / st-www. cs. illinois. edu/users/ smarch/ st-docs/ mvc. html).
[3] Simple Example of MVC (Model View Controller) Design Pattern for Abstraction (http:/ / www. codeproject. com/ Articles/ 25057/Simple-Example-of-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] http:/ / heim. ifi. uio. no/ ~trygver[7] Notes and Historical documents (http:/ / heim. ifi. uio. no/ ~trygver/ themes/ mvc/ mvc-index. html) from Trygve Reenskaug, inventor of
MVC.[8] "A note on DynaBook requirements", Trygve Reenskaug, 22 March 1979, SysReq.pdf (http:/ / folk. uio. no/ trygver/ 1979/ sysreq/ SysReq.
pdf).
![Page 6: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/6.jpg)
Modelovistacontrolador 6
[9][9] [http://st-www.cs.uiuc.edu/users/smarch/st-docs/mvc.html How to use Model-View-Controller (MVC)[10] Also published as " A Description of the Model-View-Controller 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.[11] http:/ / msdn. microsoft. com/ en-us/ library/ ff649643. aspx[12] The evolution of MVC and other UI architectures (http:/ / martinfowler. com/ eaaDev/ uiArchs. html) from Martin Fowler.[13] How to Use Model–View–Controller (MVC) (http:/ / st-www. cs. illinois. edu/ users/ smarch/ st-docs/ mvc. html).[14] MCV en javascript con AJAX y jQuery (http:/ / www. cristalab. com/ tutoriales/
mvc-en-javascript-con-ajax-y-jquery-parte-2-controladores-c95719l/ )[15] http:/ / developer. apple. com[16] http:/ / opensource. org/ licenses/ mit-license. php[17] http:/ / www. apache. org/ licenses/ LICENSE-2. 0. html[18] http:/ / www. opensource. org/ licenses/ gpl-license. php[19] http:/ / nt. tusoporte. es/ IjoProject[20] http:/ / www. martincordova. com[21] http:/ / beehive. apache. org/[22] http:/ / tapestry. apache. org/[23] http:/ / www. auroramvc. org[24] http:/ / java. sun. com/ javaee/ javaserverfaces/[25] http:/ / www. gnu. org/ copyleft/ gpl. html[26] http:/ / sailsjs. org/[27] http:/ / www. sencha. com/ products/ extjs/[28] http:/ / mojolicio. us/[29] http:/ / www. catalystframework. org/[30] http:/ / cgiapp. erlbaum. net/[31] http:/ / usegantry. org/[32] http:/ / jifty. org/ view/ HomePage[33] http:/ / maypole. perl. org/[34] http:/ / www. openinteract. org/[35] http:/ / pagekit. org/[36] http:/ / www. cyclone3. org/ home[37] http:/ / search. cpan. org/ perldoc?CGI::Builder[38] http:/ / laravel. com/[39] http:/ / sites. google. com/ site/ phpframeworkpoo/ download-framework[40] http:/ / www. opensource. org/ licenses/ lgpl-license. php[41] http:/ / www. zanphp. com/[42] http:/ / tlalokes. org/[43] http:/ / www. siaempresarial. com/ mvc/ mvc-license. php[44] http:/ / siaempresarial. com/ siamvc/[45] http:/ / agavi. org/[46] http:/ / www. opensource. org/ licenses/ bsd-license. php[47] http:/ / framework. zend. com/[48] http:/ / www. opensource. org/ licenses/ mit-license. php[49] http:/ / www. cakephp. org/[50] http:/ / www. kumbiaphp. com/[51] http:/ / www. symfony-project. org/ license[52] http:/ / www. symfony. com/[53] http:/ / www. symfony-project. com/ licenses/ mit-license. php[54] http:/ / qcodo. com/[55] http:/ / codeigniter. com/[56] https:/ / github. com/ joeblack0/ polka-php[57] http:/ / kohanaframework. org/[58] http:/ / php4e. codeman. cl/ index. php?SECCION=msg& COD=59& MODULE=home[59] http:/ / php4e. codeman. cl/[60] http:/ / www. pradosoft. com/[61] http:/ / www. practico. org/[62] http:/ / www. flavorphp. com/[63] http:/ / www. apache. org/ licenses/ LICENSE-2. 0[64] http:/ / code. google. com/ p/ yupp/[65] http:/ / www. yiiframework. com/ license/
![Page 7: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/7.jpg)
Modelovistacontrolador 7
[66] http:/ / www. yiiframework. com/[67] http:/ / www. logick. es[68] http:/ / www. logick. es/[69] https:/ / github. com/ alrik11es/ sPHPf/ blob/ master/ license. txt[70] http:/ / sphpf. coldstarstudios. com/[71] http:/ / www. gvpontis. gva. es/ cast/ gvhidra-herramienta/ gvhidra-que-es-gvhidra/[72] http:/ / www. gvhidra. org[73] http:/ / www. zope. org/ Resources/ License/[74] http:/ / wiki. zope. org/ zope3/ MVC[75] http:/ / docs. turbogears. org/ 1. 0/ License[76] http:/ / www. turbogears. org/[77] http:/ / web2py. com/ examples/ default/ license[78] http:/ / web2py. com/[79] http:/ / pylonshq. com/ project/ pylonshq/ browser/ LICENSE[80] http:/ / pylonshq. com/[81] http:/ / code. djangoproject. com/ browser/ django/ trunk/ LICENSE[82] http:/ / www. castleproject. org/ index. html[83] http:/ / www. castleproject. org/ monorail/ index. html[84] http:/ / www. springframework. net/[85] http:/ / mavnet. sourceforge. net/[86] http:/ / www. opensource. org/ licenses/ ms-pl. html[87] http:/ / www. asp. net/ mvc[88] http:/ / msdn. microsoft. com/ practices/[89] http:/ / msdn. microsoft. com/ practices/ compcat/ default. aspx?pull=/ library/ en-us/ dnpag/ html/ uipab. asp[90] http:/ / opensource. adobe. com/ wiki/ display/ cairngorm/ Cairngorm[91] http:/ / code. google. com/ p/ cycleframework/
Enlaces externos• Desarrollando una aplicación Java MVC paso a paso (http:/ / www. re-orientation. com/
manual-creacion-aplicacion-java-MVC)• Introducción 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 aplicación Spring MVC paso a paso (http:/ / www. davidmarco. es/ spring-mvc)• Definición básica del MVC (http:/ / www. lab. inf. uc3m. es/ ~a0080802/ RAI/ mvc. html)• Ejemplo de MVC en Gambas3. Programación Visual en gnu/linux (http:/ / jsbsan. blogspot. com. es/ 2013/ 08/
modelo-vista-controlador-mvc-ejemplos. html)
![Page 8: Modelo–Vista–Controlador](https://reader035.vdocuments.net/reader035/viewer/2022081803/55725c24497959da6be8b239/html5/thumbnails/8.jpg)
Fuentes y contribuyentes del artículo 8
Fuentes y contribuyentes del artículoModelo–vista–controlador Fuente: http://es.wikipedia.org/w/index.php?oldid=74259247 Contribuyentes: Agomez, Airunp, Alegorico, AlfonsoERomero, Alfonsodg, Alfonsor67, AlfredoNovoa, Armaghyon, Ascánder, Açipni-Lovrij, Betoxx, Bibliofilotranstornado, Blacoste, Bloomy, Camilo, Chemagato, Davidmarco, Deivinsontejeda, Dem, Diegusjaimes, Dmontalvo,Earroyoron, Eliurkis, Ezarate, Faschistisch, G013m, Gatm50, GermanX, Gulincho, Hirsulhim, Ivangeta, JMPerez, Jesuja, JoaquinFerrero, Joselitohacker, Josexu32, Jsbsan, Jugones55, Kasappeal, Kraixx, Lasneyx, Leonardocaballero, Leonpolanco, Lmsilva, Lnieto, Mabarroso, Mariogarcia ar, Martindiego, Matdrodes, MendaSpain, Miuler, Mortadelo2005, Nsg.es, Osepu, Pablo323,Ppazos, Ppfk, Rastreador, Rherrera72, Romanc19s, Savig, SieirA, Stoleman, Tirithel, Triki, Txuspe, UA31, Viko, 234 ediciones anónimas
Fuentes de imagen, Licencias y contribuyentesArchivo:ModelViewControllerDiagram es.svg Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:ModelViewControllerDiagram_es.svg Licencia: Public Domain Contribuyentes:Traced by User:Stannered, translated by User:JMPerezArchivo:MVC-Process.png Fuente: http://es.wikipedia.org/w/index.php?title=Archivo:MVC-Process.png Licencia: Public Domain Contribuyentes: Wdror-wsu-ap and Regis Frey
LicenciaCreative Commons Attribution-Share Alike 3.0//creativecommons.org/licenses/by-sa/3.0/