Model-view-controller (MVC) es un tipo de arquitectura de software y patrón de diseño que segmenta cada elemento de un programa en áreas de funcionalidad bien definidas. En la arquitectura modelo-vista-controlador, el modelo se ocupa de toda la lógica del programa interno que manipula, guarda, recupera y maneja y calcula los datos. El aspecto de vista es responsable de mostrar información del modelo para el usuario, y también proporciona una forma para que el usuario dé entrada al programa. El controlador toma información de la vista, la evalúa o la procesa e interactúa con el modelo para cambiar los datos o el estado del programa, que finalmente se muestra al usuario a través de la vista. Aunque el diseño modelo-visor-controlador requiere un programa para encapsular la funcionalidad, las tres secciones aún necesitan interactuar entre sí de alguna manera y generalmente dependen unas de otras en cierto sentido, a diferencia de otros patrones de diseño más agresivos.
Muy a menudo, el patrón modelo-vista-controlador se ve en aplicaciones que administran una interfaz gráfica de usuario (GUI). Usando el patrón MVC, los diferentes elementos visuales de la GUI son manejados por la vista, el registro y procesamiento de dónde y qué hace clic el usuario es manejado por el controlador, y el modelo realiza el cambio de información o la carga de información. Dependiendo del diseño exacto de una aplicación, cada componente del patrón MVC puede tener un mecanismo para interactuar con los otros componentes, como que el modelo pueda ordenar directamente a la vista que actualice la pantalla o que la vista tenga una forma de indicar el controlador que está actualizando la pantalla y no aceptar nueva entrada. A diferencia de algunos patrones de diseño que adoptan un enfoque estricto de caja negra, los programas de controlador de vista de modelo tienden a ser un poco más flexibles, aunque algunas implementaciones pueden hacer que un programa MVC sea difícil de cambiar o depurar modularmente.
En ciertos casos, el patrón modelo-vista-controlador no tiene que contener solo uno de cada componente. Un ejemplo es una aplicación que tiene varias vistas, como varios monitores, o una pantalla que se puede ver en varios dispositivos cliente. Se pueden usar múltiples vistas y controladores en una aplicación que permite que muchos usuarios accedan a una base de datos, todos respondiendo a un solo modelo. Sin embargo, es más común diseñar sistemas que mantengan una proporción uno a uno de los componentes modelo-vista-controlador.
Aunque los componentes modelo-vista-controlador dependen unos de otros, puede ser mucho más fácil modificar ciertas partes de un sistema que usan el patrón MVC que si no se usara ningún patrón, especialmente en el caso de no orientado a objetos. aplicaciones. Si una aplicación utiliza devoluciones de llamada o escuchas y observadores para implementar interacciones entre los componentes, entonces cada componente puede cambiarse sin afectar a los otros dos. Esto significa que se podría implementar una nueva GUI sin afectar el modelo o el controlador. Sin embargo, debe tenerse en cuenta que los cambios fundamentales en un sistema de controlador de vista de modelo pueden requerir una pequeña cantidad de codificación para cada componente individual.