¿Cuál es la diferencia entre el patrón de diseño MVC, MVP y MVVM en términos de codificación c#


Si buscamos en Google usando la frase "¿Cuál es la diferencia entre MVC, MVP y MVVM design pattern", entonces podemos obtener algunas URL que discuten la diferencia entre MVC MVP y MVVM design pattern teóricamente como :

MVP

Se utiliza en situaciones en las que no es posible el enlace a través de un datacontext. Windows Forms es un ejemplo perfecto de esto. Para separar la vista del modelo, se necesita un presentador. Dado que la vista no puede enlazar directamente a la presentador, la información se debe pasar a la vista a través de una interfaz (iView).

MVVM

Úselo en situaciones en las que sea posible el enlace a través de un datacontext. ¿Por qué? Las diversas interfaces iView para cada vista se eliminan, lo que significa menos código para mantener. Algunos ejemplos donde MVVM es posible incluyen proyectos WPF y javascript usando Knockout.

MVC

Se usa en situaciones en las que la conexión entre la vista y el resto del programa no siempre es disponible (y no se puede emplear de manera efectiva MVVM o MVP). Esto describe claramente la situación en la que una API web se separa de los datos enviados a los navegadores cliente. Microsoft ASP.NET MVC es una gran herramienta para la gestión de este tipo de 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 muy bueno si me sale un artículo que discutir 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 similares CRUD que ha sido implementado por estos tres patrones de diseño (MVC, MVP y MVVM). Para que pueda ir a través del código y entender cómo se debe escribir código para estos tres patrones de diseño (MVC, MVP y MVVM).

Entonces, si existe algún artículo que explique cómo el código se vería diferente para estos 3 patrones de diseño (MVC, MVP y MVVM), por favor, redirígame a ese artículo.

Author: Richie Thomas, 2013-10-18

4 answers

Este debería ser un buen comienzo. En realidad, su 'plataforma' elegida también juega un papel importante en la forma en que utiliza estos patrones. Por ejemplo, MVVM es naturalmente adecuado para WPF, mientras que MVP funciona bien con Windows Forms. ASP.Net MVC habla por sí mismo.

 49
Author: David Osborne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-18 08:09:45

Algunas diferencias básicas se pueden escribir en breve:

MVC:

MVC tradicional es donde hay un

  1. Modelo: Actúa como modelo para los datos
  2. Vista: Se ocupa de la vista del usuario que puede ser la interfaz de usuario
  3. Controlador: Controla la interacción entre el Modelo y la Vista, donde la vista llama al controlador para actualizar el modelo. View puede llamar a varios controladores si es necesario.

MVP:

Similar al MVC tradicional pero Controlador es reemplazado por 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 del Modelo de vista. Es una especie de implementación del Patrón de Diseño del Observador, donde los cambios en el modelo también se representan en la vista, por la VM. Por ejemplo: Si se cambia un control deslizante, no solo se actualiza el modelo, sino los datos que pueden ser un texto, es decir se muestra en la vista también se actualiza. Así que hay un enlace de datos bidireccional.

 74
Author: Pritam Banerjee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-02 12:17:04

Gran explicación del enlace: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Veamos Primero 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á interconectado con para iniciar alguna funcionalidad.

Hay muchos a uno relación entre el Controlador y la vista. Esto se debe a que un solo controlador puede seleccionar diferentes vistas para ser renderizadas en función de la operación que se está ejecutando.

Hay una flecha de forma desde el Controlador para Ver. Esto se debe a que la vista no tiene ningún conocimiento o referencia al controlador.

El Controlador devuelve el Modelo, por lo que hay conocimiento entre la Vista y el Modelo esperado que se pasa a ella, pero no el Controlador que la sirve hasta.

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.

Existe una asignación 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 es consciente de la vista su asociado con.

El Presentador actualiza la vista en función de las acciones solicitadas que realiza en el Modelo, pero la Vista no es compatible con el Modelo.

MVVM-Vista del modelo Ver Modelo

Así que con los patrones MVC y MVP delante de nosotros, echemos un vistazo al 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. Esto es por qué es posible tener un mapeo de uno a muchos entre varias Vistas y un Modelo de Vista, incluso en todas las tecnologías. Por ejemplo, una vista WPF y una Vista Silverlight podrían compartir el mismo modelo de vista.

 27
Author: taha027,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-31 07:37:59

MVC, MVP, MVVM

MVC (antiguo)

MVP (más modular debido a su bajo acoplamiento. Presentador es un mediador entre Vista y Modelo)

MVVM (Ya tiene enlace bidireccional entre VM y el componente UI, por lo que está más automatizado que MVP) introduzca la descripción de la imagen aquí

Otra imagen: introduzca la descripción de la imagen aquí

 21
Author: Uddhav Gautam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-12 05:02:40