Si buscamos en Google usando la frase "¿Cuál es la diferencia entre el patrón de diseño MVC, MVP y MVVM", entonces podemos obtener algunas URL que discuten la diferencia entre el patrón de diseño MVC MVP y MVVM teóricamente como :
MVP
Úselo en situaciones en las que el enlace a través de un contexto de datos no sea posible. Windows Forms es un ejemplo perfecto de esto. Para separar la vista del modelo, se necesita un presentador. Dado que la vista no puede vincularse directamente con el presentador, la información debe pasarse a la vista a través de una interfaz (IView).
MVVM
Úselo en situaciones donde es posible la vinculación a través de un contexto de datos. ¿Por qué? Se eliminan las diversas interfaces IView para cada vista, lo que significa menos código para mantener. Algunos ejemplos en los que es posible MVVM incluyen proyectos WPF y javascript que usan Knockout.
MVC
Úselo en situaciones donde la conexión entre la vista y el resto del programa no siempre está disponible (y no puede emplear MVVM o MVP de manera efectiva). Esto describe claramente la situación en la que una API web se separa de los datos enviados a los navegadores del cliente. ASP.NET MVC de Microsoft es una gran herramienta para administrar tales situaciones y proporciona un marco MVC muy claro
Pero no he encontrado un solo artículo que discuta la diferencia teóricamente junto con el código de muestra.
Sería realmente bueno si recibiera un artículo que discuta la diferencia entre estos 3 patrones de diseño (MVC, MVP y MVVM) junto con el código.
Me gustaría tener en mis manos el código fuente de 3 aplicaciones CRUD similares implementadas por estos tres patrones de diseño (MVC, MVP y MVVM). Para poder leer el código y entender cómo se debe escribir el código para estos tres patrones de diseño (MVC, MVP y MVVM).
Entonces, si existe algún artículo que discuta cómo el código se vería diferente para estos 3 patrones de diseño (MVC, MVP y MVVM), por favor, redirígeme a ese artículo.
Respuestas:
Algunas diferencias básicas se pueden escribir en resumen:
MVC:
MVC tradicional es donde hay un
MVP:
Similar al MVC tradicional pero el controlador es reemplazado por el presentador. Pero el presentador, a diferencia del controlador, también es responsable de cambiar la vista. La vista generalmente no llama al presentador.
MVVM
La diferencia aquí es la presencia de View Model. Es una especie de implementación de Observer Design Pattern, donde los cambios en el modelo también están representados en la vista, por la VM. Por ejemplo: si se cambia un control deslizante, no solo se actualiza el modelo, sino que también se actualizan los datos que pueden ser un texto que se muestra en la vista. Por lo tanto, hay un enlace de datos bidireccional.
fuente
MVC, MVP, MVVM
MVC (uno viejo)
MVP (más modular debido a su bajo acoplamiento. Presenter es un mediador entre View y Model)
MVVM (ya tiene un enlace bidireccional entre VM y el componente de la interfaz de usuario, por lo que es más automatizado que MVP)
Otra imagen:
fuente
Gran explicación del enlace: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Primero veamos MVC
La entrada se dirige primero al controlador, no a la vista. Esa entrada podría provenir de un usuario que interactúa con una página, pero también podría ser simplemente ingresando una URL específica en un navegador. En cualquier caso, es un controlador que está conectado para iniciar algunas funciones.
Existe una relación de muchos a uno entre el Controlador y la Vista. Esto se debe a que un solo controlador puede seleccionar diferentes vistas para representar en función de la operación que se ejecuta.
Hay una flecha unidireccional de Controlador a Vista. Esto se debe a que la Vista no tiene ningún conocimiento o referencia del controlador.
El Controlador devuelve el Modelo, por lo que hay conocimiento entre la Vista y el Modelo esperado que se le pasa, pero no el Controlador que lo sirve.
MVP - Presentador de vista de modelo
Ahora veamos el patrón MVP. Se ve muy similar a MVC, excepto por algunas distinciones clave:
La entrada comienza con la Vista, no con el Presentador.
Hay un mapeo uno a uno entre la Vista y el Presentador asociado.
La vista contiene una referencia al presentador. El presentador también está reaccionando a los eventos que se activan desde la Vista, por lo que está al tanto de la Vista a la que está asociada.
El presentador actualiza la vista en función de las acciones solicitadas que realiza en el modelo, pero la vista no tiene conocimiento del modelo.
MVVM - Vista Modelo Vista Modelo
Entonces, con los patrones MVC y MVP frente a nosotros, veamos el patrón MVVM y veamos qué diferencias tiene:
La entrada comienza con la Vista, no con el Modelo de vista.
Mientras que la Vista contiene una referencia al Modelo de vista, el Modelo de vista no tiene información sobre la Vista. Es por eso que es posible tener un mapeo de uno a muchos entre varias Vistas y un Modelo de Vista ... incluso a través de tecnologías. Por ejemplo, una vista WPF y una vista Silverlight podrían compartir el mismo modelo de vista.
fuente
La imagen a continuación es del artículo escrito por Erwin van der Valk:
El artículo explica las diferencias y da algunos ejemplos de código en C #
fuente