software patrones mvc entre diferencia comparacion arquitectura c# design-patterns model-view-controller mvvm mvp

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



patrones de arquitectura de software (4)

Algunas diferencias básicas se pueden escribir en pocas palabras:

MVC:

El MVC tradicional es donde hay un

  1. Modelo: Actúa como modelo de datos
  2. Ver: trata con la vista para el 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. Ver puede llamar a múltiples controladores si es necesario.

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 la VM también representa los cambios en el modelo en la vista. Por ejemplo: si se modifica un control deslizante, no solo se actualiza el modelo, sino que también se actualizan los datos que pueden ser texto y que se muestran en la vista. Entonces hay un enlace de datos bidireccional.

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 analicen teóricamente la diferencia entre MVC MVP y el patrón de diseño de MVVM

MVP

Úselo en situaciones donde no sea posible el enlace a través de un contexto de datos. Windows Forms es un ejemplo perfecto de esto. Para separar la vista del modelo, se necesita un presentador. Dado que la vista no se puede vincular directamente al 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 enlazar 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 donde MVVM es posible incluyen WPF y proyectos de javascript utilizando Knockout.

MVC

Úselo en situaciones en las que 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 gestionar tales situaciones y proporciona un marco MVC muy claro

Pero no he encontrado un solo artículo que discuta teóricamente la diferencia junto con el código de muestra.

Sería realmente bueno si recibo 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 que han sido implementadas por estos tres patrones de diseño (MVC, MVP y MVVM). Para que pueda 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 un artículo de este tipo que discuta cómo el código se vería diferente para estos 3 patrones de diseño (MVC, MVP y MVVM), por favor, redirigirme a ese artículo.


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

Primero veamos MVC

La entrada se dirige al controlador primero, 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 desde simplemente ingresar una url específica en un navegador. En cualquier caso, es un controlador que se interconecta con para iniciar alguna funcionalidad.

Hay una relación 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 está ejecutando.

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

El Controlador devuelve el Modelo, por lo que existe conocimiento entre la Vista y el Modelo esperado que se pasa a él, pero no el Controlador que lo está ejecutando.

MVP - Model View Presenter

Ahora veamos el patrón de MVP. Se ve muy similar a MVC, a excepción de algunas distinciones clave:

La entrada comienza con la Vista, no con el Presentador.

Hay una correspondencia de 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 desencadenan desde la vista, por lo que es consciente de la vista asociada.

El presentador actualiza la vista en función de las acciones solicitadas que realiza en el modelo, pero la vista no tiene en cuenta el modelo.

MVVM - Modelo de vista de 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. Esta es la razón por la cual 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 de WPF y una vista de Silverlight podrían compartir el mismo modelo de vista.


This debería ser un buen comienzo. En realidad, la "plataforma" elegida también juega un papel importante en la forma de utilizar 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.


MVC, MVP, MVVM

MVC (viejo)

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

MVVM (Ya tiene un enlace bidireccional entre la VM y el componente UI, por lo que es más automatizado que MVP)

Otra imagen: