Como programador serio, ¿cómo responde a la pregunta ¿Qué es MVC?
En mi opinión, MVC es una especie de tema nebuloso, y debido a eso, si tu audiencia es un aprendiz, entonces eres libre de describirlo en términos generales que es poco probable que sean controvertidos.
Sin embargo, si está hablando con una audiencia bien informada, especialmente un entrevistador, me resulta difícil pensar en una dirección que no tome el riesgo de una reacción de "¡bueno, eso no está bien! ...". Todos tenemos diferentes experiencias en el mundo real, y realmente no he cumplido el mismo patrón de implementación MVC dos veces.
Específicamente, parece haber desacuerdos con respecto a la rigurosidad, la definición de los componentes, la separación de las partes (qué pieza encaja dónde), etc.
Entonces, ¿cómo debo explicar MVC de manera correcta, concisa y sin controversias?
fuente
Respuestas:
MVC es una arquitectura de software, la estructura del sistema, que separa la lógica de dominio / aplicación / negocio (lo que prefiera) del resto de la interfaz de usuario. Lo hace separando la aplicación en tres partes: el modelo, la vista y el controlador.
El modelo gestiona comportamientos y datos fundamentales de la aplicación. Puede responder a solicitudes de información, responder a instrucciones para cambiar el estado de su información e incluso notificar a los observadores en sistemas controlados por eventos cuando la información cambia. Esto podría ser una base de datos, o cualquier número de estructuras de datos o sistemas de almacenamiento. En resumen, son los datos y la gestión de datos de la aplicación.
La vista proporciona efectivamente el elemento de interfaz de usuario de la aplicación. Representará los datos del modelo en un formulario adecuado para la interfaz de usuario.
El controlador recibe la entrada del usuario y realiza llamadas a los objetos del modelo y la vista para realizar las acciones apropiadas.
Con todo, estos tres componentes trabajan juntos para crear los tres componentes básicos de MVC.
fuente
Analogía
Le expliqué MVC a mi papá así:
MVC (Modelo, Vista, Controlador) es un patrón para organizar el código en una aplicación para mejorar la capacidad de mantenimiento.
Imagine un fotógrafo con su cámara en un estudio. Un cliente le pide que tome una foto de una caja.
El cuadro es el modelo , el fotógrafo es el controlador y la cámara es la vista .
Debido a que la caja no sabe acerca de la cámara o el fotógrafo, es completamente independiente. Esta separación le permite al fotógrafo caminar alrededor de la caja y apuntar la cámara en cualquier ángulo para obtener la toma / vista que desea.
Las arquitecturas no MVC tienden a estar estrechamente integradas entre sí. Si la caja, el controlador y la cámara fueran uno y el mismo objeto, tendríamos que separarnos y luego reconstruir tanto la caja como la cámara cada vez que quisiéramos obtener una nueva vista. Además, tomar la foto siempre sería como tratar de tomar una selfie, y eso no siempre es muy fácil.
Explicación detallada
Fue solo después de leer la siguiente pregunta / respuesta maillist que sentí que entendía MVC. Cita: https://mail.python.org/pipermail/python-list/2006-January/394968.html
fuente
MVC es principalmente una palabra de moda.
Solía considerarse un patrón, pero su definición original de 1979 ha sido tonta, transmitida, malinterpretada, fuera del contexto original. Ha sido mal redefinido hasta el punto de que comienza a parecerse a una religión, y aunque esto ciertamente ayuda a sus cultistas de carga a defenderlo, su nombre ya no se asocia con un conjunto sólido de pautas . Como tal, ya no se puede considerar un patrón.
MVC nunca tuvo la intención de describir aplicaciones web.
Ni sistemas operativos modernos, ni idiomas.
(algunos de los cuales hicieron que la definición de 1979 fuera redundante)
Fue hecho para. Y no funcionó.
Ahora tratamos con un híbrido web-mvc obsceno que, con su horrible estado de palabra de moda, mala definición y tener programadores semi-analfabetos como objetivo demográfico, hace una muy mala publicidad a los patrones de software en general.
MVC, por lo tanto, se convirtió en una separación de las preocupaciones destiladas para las personas que realmente no quieren pensar demasiado en ello.
Los sitios web / aplicaciones web en los años 90 realmente no se usaban para aplicar la separación de preocupaciones.
Eran horribles fallas de código de espagueti entremezclado.
Los cambios de UI, rediseños y reordenamientos de datos fueron increíblemente difíciles, caros, largos, deprimentes y desafortunados.
Las tecnologías web como ASP, JSP y PHP hacen que sea demasiado fácil mezclar preocupaciones de vista con datos y preocupaciones de aplicación. Los recién llegados al campo generalmente emiten bolas de barro de código inextricables como en aquellos viejos tiempos.
Por lo tanto, un número creciente de personas comenzó a repetir "usar MVC" en bucles sin fin en los foros de soporte. El número de personas se expandió hasta el punto de incluir gerentes y especialistas en marketing (para algunos el término ya era familiar, desde aquellos tiempos en la programación gui, en la que el patrón tenía sentido) y eso se convirtió en el gigante de una palabra de moda que tenemos que enfrentar ahora. .
Tal como está, es sentido común , no una metodología .
Es un punto de partida , no una solución .
Es como decirle a la gente que respire aire o haga abdominales , no una cura para el cáncer .
fuente
It's a fancy word for pre-existing concepts that didn't really need one.
¿Y qué patrón / arquitectura de diseño no se ajusta a esa descripción?The data model is handled one way, the view in another, the rest is just named "controller"
+1La mejor manera de definirlo es ir a los escritos originales de Trygve Reenskaug , quien lo inventó: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Este documento, en particular, generalmente se considera el texto de definición: http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
fuente
MVC es un patrón de diseño utilizado para aislar la lógica empresarial de la presentación.
Se diferencia de muchos otros patrones de diseño por el hecho de que generalmente no se implementa de manera sucinta, sino que es la base de un marco.
Si bien una aplicación que implementa un patrón de Estrategia es solo un pequeño detalle al respecto, decir que una aplicación web usa el patrón de diseño MVC es muy definitorio de su arquitectura .
fuente
MVC es un diseño de software que separa los siguientes componentes de un sistema o subsistema:
fuente
Diría que MVC es un concepto o una familia de patrones similares.
Creo que vale la pena leer este artículo. Arquitecturas GUI por Martin Fowler
fuente
Primero, debe determinar quién es el que hace la pregunta y qué tipo de respuesta está buscando. Respondes a esta pregunta con otra pregunta, como "¿En qué sentido?"
Puede preguntar si se refieren a MVC en general, una implementación particular de MVC (es decir, asp.net MVC, spring MVC, smalltalk MVC, etc.), qué es técnicamente, qué es filosóficamente (sí, tiene un filosofía también), etc.
Si esta es una pregunta en una prueba, y no puede pedirle al autor de la pregunta que aclare, entonces tendrá que adivinar según el contexto.
Una buena respuesta simple es:
También puede decir:
Pero, al final, se te juzgará si das la respuesta que esperan. La única solución al problema es averiguar qué tipo de respuesta esperan.
fuente
Esto es lo que diría al respecto. Trataría de explicarlo en términos de aplicaciones móviles, porque es con lo que estoy más familiarizado y porque no creo haberlo entendido completamente antes de comenzar a hacer aplicaciones móviles.
Tomemos Android por ejemplo.
Capa de presentación, es decir. La interfaz de usuario puede (debería, la mayoría de las veces) especificarse completamente en xml. Por simplicidad, digamos que un archivo xml describe una pantalla en la aplicación. El archivo XML especifica controles, diseño de los controles, posicionamiento, colores, tamaño, etiquetas de cadena ... todo lo relacionado con la presentación. Sin embargo, no sabe nada sobre cuándo se llamará, cuándo se colocará en la pantalla. ¿Será un diseño independiente o parte de un diseño más grande? Ahí lo tienes: tu VISTA perfecta .
Ahora, obviamente, la vista debe colocarse en la pantalla en algún momento, entonces, ¿cómo debería hacerlo? Su CONTROLADOR , en Android llamado Actividad. Como su nombre lo dice, la actividad hace algo de actividad. Incluso si su único propósito es mostrar la vista definida en el paso 1, realizará alguna acción. Entonces, la actividad obtiene una vista y la muestra en la pantalla. Como la vista no sabe nada acerca de la actividad, la actividad tampoco sabe nada acerca de la presentación real. Nosotros (los programadores) podríamos reorganizar el diseño de la vista varias veces, sin cambiar ni una sola línea de código en nuestra actividad.
Ahora, no tiene mucho uso presentar su bonito diseño brillante y bien definido de XML sin hacer algo realmente. Digamos que queremos almacenar los datos ingresados por el usuario. La actividad debe abordar este proceso, desde tomar los datos del usuario hasta pasarlos a otra persona para que los maneje (procesar, almacenar, eliminar). ¿A quién le pasará? Bueno, a un MODELO . Me gusta pensar que una modelo es pura. clase de Java que no sabe nada sobre el contexto de aplicación en el que vive. (En la práctica, ese casi nunca será el caso).
Digamos que tengo una clase Persona que tiene tres propiedades: nombre, dirección, edad. Mi diseño definido por XML tiene 3 campos para la entrada del usuario: nombre, dirección, edad. Mi actividad toma los tres valores de la entrada del usuario, crea un nuevo objeto Person e invoca algún método que sepa cómo manejar una lógica específica de Person. Ahí tienes. Modelo-Vista-Controlador.
fuente
Siempre empiezo diciéndoles que el patrón no es nada nuevo y que ha existido durante muchos años ... es en este punto que me dan una mirada inquisitiva y ¡BAM !, están enganchados:
Y luego hablaría sobre los diversos puntos, como las respuestas anteriores, pero creo que también es importante ser contextual, como dijo JB King, ASP.NET MVC, etc.
fuente