Modelo-vista-controlador (generalmente conocido como MVC ) es un patrón de diseño de software [1] comúnmente utilizado para desarrollar interfaces de usuario que divide la lógica del programa relacionado en tres elementos interconectados. Esto se hace para separar las representaciones internas de información de las formas en que se presenta y acepta la información al usuario. [2] [3]
Este patrón, utilizado tradicionalmente para interfaces gráficas de usuario ( GUI ) de escritorio , se ha vuelto popular para diseñar aplicaciones web . [4] Los lenguajes de programación populares tienen marcos MVC que facilitan la implementación del patrón.
Componentes
- Modelo
- El componente central del patrón. Es la estructura de datos dinámica de la aplicación, independiente de la interfaz de usuario. [5] Gestiona directamente los datos, la lógica y las reglas de la aplicación.
- Vista
- Cualquier representación de información como un gráfico, diagrama o tabla. Son posibles varias vistas de la misma información, como un gráfico de barras para la gestión y una vista tabular para los contables.
- Controlador
- Acepta la entrada y la convierte en comandos para el modelo o la vista. [6]
Además de dividir la aplicación en estos componentes, el diseño modelo-vista-controlador define las interacciones entre ellos. [7]
- El modelo se encarga de gestionar los datos de la aplicación. Recibe información del usuario del controlador.
- La vista muestra la presentación del modelo en un formato particular.
- El controlador responde a la entrada del usuario y realiza interacciones en los objetos del modelo de datos. El controlador recibe la entrada, opcionalmente la valida y luego pasa la entrada al modelo.
Al igual que con otros patrones de software, MVC expresa el "núcleo de la solución" a un problema al tiempo que permite que se adapte a cada sistema. [8] Los diseños de MVC particulares pueden variar significativamente de la descripción tradicional aquí. [9]
Historia
MVC, una de las ideas fundamentales en el desarrollo temprano de interfaces gráficas de usuario, se convirtió en uno de los primeros enfoques para describir e implementar construcciones de software en términos de sus responsabilidades . [10]
Trygve Reenskaug introdujo MVC en Smalltalk -79 mientras visitaba el Centro de Investigación Xerox Palo Alto (PARC) [11] [12] en la década de 1970. En la década de 1980, Jim Althoff y otros implementaron una versión de MVC para la biblioteca de clases Smalltalk-80. Solo más tarde, un artículo de 1988 en The Journal of Object Technology (JOT) expresó MVC como un concepto general. [13]
El patrón MVC ha evolucionado posteriormente, [14] dando lugar a variantes como modelo-vista-controlador jerárquico (HMVC), modelo-vista-adaptador (MVA), modelo-vista-presentador (MVP), modelo-vista-modelo de vista ( MVVM), y otros que adaptaron MVC a diferentes contextos.
El uso del patrón MVC en aplicaciones web explotó en popularidad después de la introducción de NeXT 's WebObjects en 1996, que fue escrito originalmente en Objective-C (que prestado en gran medida de Smalltalk) y ayudó a hacer cumplir los principios MVC. Más tarde, el patrón MVC se hizo popular entre los desarrolladores de Java cuando WebObjects se transfirió a Java . Los marcos posteriores para Java, como Spring (lanzado en octubre de 2002), continuaron el fuerte vínculo entre Java y MVC. La introducción de los marcos Django (julio de 2005, para Python ) y Rails (diciembre de 2005, para Ruby ), ambos con un fuerte énfasis en la implementación rápida, aumentó la popularidad de MVC fuera del entorno empresarial tradicional en el que ha sido popular durante mucho tiempo.
Uso en aplicaciones web
Aunque originalmente desarrollado para computación de escritorio, MVC ha sido ampliamente adoptado como diseño para aplicaciones World Wide Web en los principales lenguajes de programación . Se han creado varios marcos web que refuerzan el patrón. Estos marcos de software varían en sus interpretaciones, principalmente en la forma en que las responsabilidades de MVC se dividen entre el cliente y el servidor . [15]
Algunos frameworks web MVC adoptan un enfoque de cliente ligero que coloca casi todo el modelo, la vista y la lógica del controlador en el servidor. En este enfoque, el cliente envía solicitudes de hipervínculo o presentaciones de formularios al controlador y luego recibe una página web completa y actualizada (u otro documento) de la vista; el modelo existe completamente en el servidor. [15]
Ver también
- Arquitectura de varios niveles
- Modelo jerárquico-vista-controlador
- Adaptador de vista de modelo
- Modelo – vista – presentador
- Modelo-vista-modelo de vista
- Patrón Entidad-Control-Límite
- Presentación-abstracción-control
- Acción – dominio – respondedor
- Patrón de observador
- Separación de intereses
- Patrón de estrategia
- Objetos desnudos
Referencias
- ^ https://www.youtube.com/watch?v=o_TH-Y78tt4&t=1667
- ^ Reenskaug, Trygve; Coplien, James O. (20 de marzo de 2009). "La arquitectura DCI: una nueva visión de la programación orientada a objetos" . Desarrollador Artima . Archivado desde el original (html) el 23 de marzo de 2009 . Consultado el 3 de agosto de 2019 .
Más profundamente, el marco existe para separar la representación de la información de la interacción del usuario.
- ^ Burbeck (1992): "... la entrada del usuario, el modelado del mundo externo y la retroalimentación visual para el usuario están explícitamente separados y manejados por tres tipos de objeto".
- ^ Davis, Ian. "¿Cuáles son los beneficios de MVC?" . Alquimia de Internet . Consultado el 29 de noviembre de 2016 .
- ^ Burbeck, Steve (1992) Programación de aplicaciones en Smalltalk-80: Cómo utilizar Model-View-Controller (MVC)
- ^ Ejemplo simple de patrón arquitectónico MVC (modelo-vista-controlador) para abstracción
- ^ Buschmann, Frank (1996) Arquitectura de software orientada a patrones .
- ^ Gamma, Erich et al. (1994) Patrones de diseño
- ^ Moore, Dana y col. (2007) Aplicaciones profesionales de Internet enriquecidas: Ajax y más allá : "Desde el origen de MVC, ha habido muchas interpretaciones del patrón. El concepto se ha adaptado y aplicado de muy diferentes formas a una amplia variedad de sistemas y arquitecturas".
- ^ Modelo – Vista – Historial del controlador . C2.com (11 de mayo de 2012). Consultado el 9 de diciembre de 2013.
- ^ Notas y documentos históricos de Trygve Reenskaug, inventor de MVC.
- ^ "Una nota sobre los requisitos de DynaBook", Trygve Reenskaug, 22 de marzo de 1979, SysReq.pdf .
- ^ Krasner, Glenn E .; Pope, Stephen T. (agosto-septiembre de 1988). "Un libro de recetas para usar el paradigma de la interfaz de usuario del controlador de vista de modelo en Smalltalk-80" . La revista de tecnología de objetos . Publicaciones SIGS. 1 (3): 26–49.También publicado como " Descripción del paradigma de la interfaz de usuario modelo-vista-controlador en el sistema Smalltalk-80 " (informe), ParcPlace Systems; Consultado el 5 de junio de 2012.
- ^ La evolución de MVC y otras arquitecturas de interfaz de usuario de Martin Fowler.
- ^ a b Leff, Avraham; Rayfield, James T. (septiembre de 2001). Desarrollo de aplicaciones web utilizando el patrón de diseño de modelo / vista / controlador . Conferencia IEEE Enterprise Distributed Object Computing. págs. 118-127.