¿MVC se aplica solo a la web?

14

Es casi instantáneo cada vez que hablo con los desarrolladores sobre Model View Controller ( MVC ), me dicen que hace una solicitud a una url, el servidor construye una entidad (MODELO) y le proporciona una representación visual de ese modelo.

  • Entonces, ¿esto significa que MVC es solo para la web o he estado conociendo personas que son solo desarrolladores que emplean MVC para escribir aplicaciones web?

  • ¿Hay usos para MVC en aplicaciones de estilo de escritorio?

  • Por mi parte, soy nuevo en el paradigma y me gustaría saber de cualquier superconjunto de MVC

Deeptechtons
fuente
1
¿ verificó los wikis de la etiqueta Programmers.SE o Stack Overflow para 'mvc'?
mosquito
3
@gnat sí lo hice
Deeptechtons
66
bueno, entonces probablemente ya sabes la respuesta a tu pregunta, ¿no?
mosquito
44
@gnat en serio NO, soy totalmente nuevo en MVC (como se dijo) y nunca he usado o escuchado (algunos oídos que tengo) sobre MVC aplicado a aplicaciones de Windows o una aplicación que tiene una insignia MVC en la página de descargas. Perdón si la pregunta fue tonta pero para mí sí es un rompecabezas
Deeptechtons
Hay muchos recursos buenos para aprender la historia de MVC, pero veo mucho este concepto erróneo, así que escribí un buen resumen en mi blog blog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Respuestas:

22

MVC es un patrón. Los patrones se aplican a toda la programación. MVC simplemente funciona muy bien en un contexto web.

Como señala gnat, solo eche un vistazo a la etiqueta mvc y verá múltiples ejemplos de cómo se implementa.

Tom Squires
fuente
55
Esta es la clave. MVC funciona realmente bien en aplicaciones web, y de hecho es una gran parte de la razón por la cual los marcos modernos basados ​​en MVC (como Rails, Django y ASP.NET MVC) son tan populares. También funciona en otros contextos (como las aplicaciones de escritorio), pero es más difícil mantener una separación limpia de vista y controlador, por lo que las variantes que eliminan la separación del controlador de vista como delegador de modelos (utilizado por Swing) o cambian donde ocurre la división como Model-View-ViewModel (utilizado principalmente por las aplicaciones .Net WPF) son más comunes en las aplicaciones de escritorio.
Kevin Cathcart
Si nos fijamos en la descripción original de Smalltalk de lo que hace un controlador - traduce la entrada del usuario en mensajes para el modelo - Windows mismo es básicamente un gran controlador; Es por eso que MVC como patrón no encaja muy bien con las aplicaciones de IU de Windows. Se usa mucho más en UI Frameworks para sistemas que no son de Windows.
KutuluMike
@MichaelEdenfield No realmente; puedes hacer MVC y WinForms juntos, aunque MVP es más popular allí, pero MVP es una variante de MVC de todos modos.
Andy
45

Teniendo en cuenta que MVC es de 1977, y la web solo se inventó en 1991, debería ser bastante obvio que MVC no es solo para la web.

Jörg W Mittag
fuente
30
Este es un buen comienzo de respuesta, pero tiene un sabor amargo en la boca.
Nicolas C.
2
Correcto y sarcástico. ¡Buena cosa!
Tom Hawtin - tackline
1
"En 1982, la suite de protocolos de Internet (TCP / IP) se estandarizó y se introdujo el concepto de una red mundial de redes TCP / IP totalmente interconectadas llamada Internet". wiki . Si te refieres a netscape, entonces está bien ... pero "la web" existía antes de eso.
jmq
44
@jmquigley "Internet" y "la Web" son dos cosas muy diferentes.
Eric King
1
@jmq 1977, sin embargo, ES TODAVÍA antes de 1982, y como alguien más señaló Web! = Internet. La web realmente NO existía antes de 1991.
Andy
9

No, el desarrollo para OS X e iOS utiliza el patrón Model View Controller.

Holli
fuente
2
Finalmente, una respuesta al primer y segundo punto sin el comentario.
JeffO
8

Haga la pregunta en un entorno de Microsoft y mucha gente asumirá que se refiere a Asp.Net MVC, que es una implementación de MVC específicamente para la web.

Desafortunadamente, hay muchas personas que no se dan cuenta de que esta es una implementación del patrón MVC y piensan que son términos intercambiables, lo que lleva a la suposición de "solo web".

ozz
fuente
3
+1 este es el problema al nombrar una plataforma según una metodología. Cuando las personas se presentan a la plataforma primero, no pueden ver la distinción.
MattDavey
@Ozz esto explicaba por qué otros desarrolladores siempre dicen sobre la web cuando MVC es el tema
Deeptechtons
1
Por favor, deja de pintar a los desarrolladores de Microsoft como estúpidos, gracias.
Andy
@Andy: eso no fue una incursión de los desarrolladores de MS, yo también soy un desarrollador de Asp.Net MVC y mantengo la respuesta original. No dije "todas" las personas, o "todos" los desarrolladores .net, solo una observación de una suposición o error que he visto cometer muchas personas. Gracias.
ozz
2

Al menos hasta donde sé, la primera implementación de MVC fue en Smalltalk. Definitivamente estuvo presente en Smalltalk-80. Aunque no tengo ninguna documentación a mano para probarlo, creo que (o algo bastante similar de todos modos) había estado en Smalltalk durante algunos años para entonces.

La mayoría de los marcos OO GUI han incluido al menos alguna variante de MVC. Sin embargo, no estoy seguro de qué significa exactamente "superconjunto" en este caso. Es un poco difícil decir si alguna variante dada es un superconjunto, subconjunto o par de MVC, pero tendería a considerar a la mayoría de ellos como pares.

En cualquier caso, muchos (¿la mayoría?) De estos se han utilizado para el desarrollo de escritorio, no para el desarrollo web. Gracias a algunas patentes antiguas de AT&T, la mayoría de los sistemas de ventanas requieren programas para poder volver a generar vistas a pedido. Esto (casi) fuerza al menos un cierto grado de separación entre el código que mantiene el estado actual (el modelo) y el código que muestra ese estado (la vista). Eso todavía deja mucho espacio para la variación en 1) el grado en que la funcionalidad del controlador está aislada, y 2) los detalles exactos de dónde dibujar las líneas entre cada una de las piezas principales.

Jerry Coffin
fuente
1

No, se aplica incluso para aplicaciones independientes. Ejemplo Java Swing sigue MVC.

Seshagiri TV
fuente
1
¡Por qué el voto negativo la persona deja vivir!
Deeptechtons
1

Por lo tanto, hay muchos patrones de diseño diferentes en esta área.

  • Presentador de vista de modelo (mvp)
  • Modelo Vista Vista Presentador (mvvp)
  • Controlador de vista de modelo
  • Modelo 2

y así. A lo largo de los años, estos se han entrelazado, combinado, cambiado y aplicado en una amplia variedad de contextos. Lo importante aquí es que el patrón de diseño MVC de 1977 ha cambiado bastante, y ya no es el patrón de diseño utilizado por los marcos web del lado del servidor. Como ejemplo en la implementación original de smalltalk, el Modelo observaría la vista de los cambios, que ya no es el caso, ya que el lado del servidor simplemente no puede observar los elementos html en el navegador de los usuarios. En cambio, si la vista cambia, la vista enviará una solicitud al controlador que luego actualizará la vista. Nuevamente, no se sigue la implementación original de MVC, ya que una actualización del modelo implicaría que todas las vistas que dependen del modelo se actualizarían.

Los marcos web modernos siguen una arquitectura simple de tres niveles, también conocida como arquitectura Modelo 2.

Por supuesto, hay ejemplos de arquitecturas MVC reales en la web, pero a menudo son solo del lado del cliente, conectadas a un servidor que sigue la arquitectura del Modelo 2, ya que las vistas son xml y json, y no se observan cambios. Ejemplos de arquitecturas mvc puras del lado del cliente son Sencha Touch y Sproutcore.

Si tiene MVC en el navegador, mvc como en el servidor y mvc como la capa de datos, tiene una implementación jerárquica de mvc.

Nota. Solo he hablado sobre frameworks web, otras implementaciones de MVC como java swing y Flex tienen otras diferencias de implementación.

Kjaer
fuente
Ciertamente no tiene sentido por qué las personas votan negativamente a los demás, si algo está mal, dígales y brinde la oportunidad de corregir su punto de vista. ¡Si no tienen conocimiento sobre el tema, un buen maestro los dirigirá a la fuente correcta y no lo golpeará hasta que lo aprenda bien!
Deeptechtons
la pregunta supone que mvc y web funcionan bien juntos y aboga por mvc no web, por lo que cuando solo da ejemplos de mvc en un contexto web: -1
hildred
1

Una cosa que debe saber es que hay tantos sabores de MVC como marcos que afirman implementar MVC.

La mayoría está de acuerdo en el hecho de que el Modelo tiene algún estado y la Vista lo representa. Pero el controlador tiene roles muy diferentes.

En Smalltalk, donde se describió por primera vez, el Modelo es el núcleo de su aplicación, datos y métodos comerciales. La Vista es una representación gráfica del estado de la aplicación (también conocido como Modelo), y el Controlador gestiona los eventos de entrada de usuario, mouse y teclado. El controlador, por ejemplo, enruta los eventos del teclado al elemento de vista que tiene el foco.

En las páginas .jsp, el modelo es principalmente datos, la vista representa ese modelo en HTML y el controlador realiza el enrutamiento del modelo a la vista adecuada para representarlo.

Entonces, para responder a su pregunta, mientras que MVC se usa tanto en aplicaciones independientes (Java, .Net, Flex) como en la web (páginas jsp), es algo muy diferente. Eso significa que el MVC que conoces no se usa en aplicaciones independientes.

Florian F
fuente