vista presentador mvc modelo entre diferencia design-patterns model-view-controller user-interface mvp glossary

design-patterns - presentador - diferencia entre mvc y mvp



¿Qué son MVP y MVC y cuál es la diferencia? (22)

Al mirar más allá de la forma RAD (arrastrar y soltar y configurar) de crear interfaces de usuario, muchas herramientas lo alientan a encontrar tres patrones de diseño llamados Model-View-Controller , Model-View-Presenter y Model-View-ViewModel . Mi pregunta tiene tres partes:

  1. ¿Qué problemas abordan estos patrones?
  2. ¿Cómo son similares?
  3. ¿En qué se diferencian?

Modelo-Vista-Presentador

En MVP , el presentador contiene la lógica empresarial de la interfaz de usuario para la vista. Todas las invocaciones del delegado de View directamente a Presenter. El presentador también se desacopla directamente de la vista y habla con él a través de una interfaz. Esto es para permitir la burla de la vista en una prueba de unidad. Un atributo común de MVP es que tiene que haber muchos despachos bidireccionales. Por ejemplo, cuando alguien hace clic en el botón "Guardar", el controlador del evento delega al método "OnSave" del Presentador. Una vez que se completa el guardado, el Presentador llamará nuevamente a la Vista a través de su interfaz para que la Vista muestre que el guardado se ha completado.

MVP tiende a ser un patrón muy natural para lograr presentaciones separadas en formularios web. La razón es que la Vista siempre se crea primero por el tiempo de ejecución de ASP.NET. Puedes averiguar más sobre ambas variantes .

Dos variaciones primarias

Vista pasiva: La vista es tan tonta como es posible y contiene una lógica casi nula. El presentador es un intermediario que habla con la vista y el modelo. La vista y el modelo están completamente protegidos entre sí. El modelo puede generar eventos, pero el presentador se suscribe a ellos para actualizar la vista. En la Vista pasiva no hay enlace de datos directo, en cambio, la Vista expone las propiedades del configurador que el Presentador utiliza para configurar los datos. Todo el estado se gestiona en el presentador y no en la vista.

  • Pro: superficie de máxima capacidad de prueba; Separación limpia de la vista y el modelo.
  • Contras: más trabajo (por ejemplo, todas las propiedades del configurador), ya que usted mismo realiza todos los datos vinculados.

Controlador supervisor: El presentador maneja los gestos del usuario. La Vista se enlaza al Modelo directamente a través del enlace de datos. En este caso, el trabajo del presentador es pasar el modelo a la vista para que pueda enlazarlo. El presentador también contendrá lógica para gestos como presionar un botón, navegación, etc.

  • Pro: al aprovechar el enlace de datos se reduce la cantidad de código.
  • En contra: hay una superficie menos comprobable (debido al enlace de datos), y hay menos encapsulación en la Vista, ya que habla directamente con el Modelo.

Controlador de vista de modelo

En el MVC , el Controlador es responsable de determinar qué Vista mostrar en respuesta a cualquier acción, incluso cuando se carga la aplicación. Esto difiere de MVP donde las acciones se dirigen a través de la Vista al Presentador. En MVC, cada acción en la Vista se correlaciona con una llamada a un Controlador junto con una acción. En la web, cada acción implica una llamada a una URL en el otro lado del cual hay un controlador que responde. Una vez que el Controlador haya completado su procesamiento, devolverá la Vista correcta. La secuencia continúa de esa manera a lo largo de la vida de la aplicación:

Action in the View -> Call to Controller -> Controller Logic -> Controller returns the View.

Otra gran diferencia acerca de MVC es que la Vista no se enlaza directamente con el Modelo. La vista simplemente se traduce, y es completamente sin estado. En las implementaciones de MVC, la Vista generalmente no tendrá ninguna lógica en el código subyacente. Esto es contrario a MVP donde es absolutamente necesario porque, si la Vista no delega al Presentador, nunca se llamará.

Modelo de presentación

Otro patrón a considerar es el modelo de modelo de presentación. En este patrón no hay presentador. En su lugar, la vista se enlaza directamente con un modelo de presentación. El modelo de presentación es un modelo creado específicamente para la vista. Esto significa que este modelo puede exponer propiedades que uno nunca pondría en un modelo de dominio, ya que sería una violación de la separación de preocupaciones. En este caso, el Modelo de presentación se enlaza con el modelo de dominio y puede suscribirse a eventos que provengan de ese Modelo. La Vista luego se suscribe a los eventos provenientes del Modelo de presentación y se actualiza a sí misma en consecuencia. El Modelo de presentación puede exponer los comandos que la vista utiliza para invocar acciones. La ventaja de este enfoque es que esencialmente puede eliminar el código subyacente por completo, ya que el PM encapsula completamente todo el comportamiento de la vista. Este patrón es un candidato muy fuerte para su uso en aplicaciones WPF y también se llama Model-View-ViewModel .

Hay un artículo de MSDN sobre el Modelo de presentación y una sección en la Guía de aplicaciones compuestas para WPF (ex Prism) sobre patrones de presentación separados


MVP: la vista está a cargo.

La vista, en la mayoría de los casos, crea su presentador. El presentador interactuará con el modelo y manipulará la vista a través de una interfaz. La vista a veces interactuará con el presentador, generalmente a través de alguna interfaz. Esto se reduce a la implementación; ¿Desea que la vista llame a los métodos del presentador o desea que la vista tenga eventos que el presentador escucha? Se reduce a esto: la vista sabe sobre el presentador. La vista delega al presentador.

MVC: el controlador está a cargo.

El controlador se crea o accede en función de algún evento / solicitud. Luego, el controlador crea la vista apropiada e interactúa con el modelo para configurar aún más la vista. Se reduce a: el controlador crea y administra la vista; La vista es esclava del controlador. La vista no se conoce sobre el controlador.


Ambos marcos intentan separar las preocupaciones, por ejemplo, la interacción con una fuente de datos (modelo), la lógica de la aplicación (o convertir estos datos en información útil) (Controlador / Presentador) y mostrar el código (Ver). En algunos casos, el modelo también se puede utilizar para convertir una fuente de datos en una abstracción de nivel superior. Un buen ejemplo de esto es el proyecto MVC Storefront .

Aquí hay una discusión sobre las diferencias entre MVC y MVP.

La distinción que se hace es que en una aplicación MVC tradicionalmente tiene la vista y el controlador interactúa con el modelo, pero no entre ellos.

Los diseños de MVP hacen que el presentador acceda al modelo e interactúe con la vista.

Dicho esto, ASP.NET MVC es, según estas definiciones, un marco MVP porque el Controlador accede al Modelo para completar la Vista, lo que significa que no debe tener lógica (solo muestra las variables proporcionadas por el Controlador).

Para obtener una idea de la distinción ASP.NET MVC de MVP, vea esta presentación MIX de Scott Hanselman.


Ambos son patrones que intentan separar la presentación y la lógica empresarial, desvinculando la lógica empresarial de los aspectos de la interfaz de usuario

Arquitectónicamente, MVP es el enfoque basado en el controlador de página, mientras que MVC es el enfoque basado en el controlador frontal. Eso significa que, en MVP, el ciclo de vida de la página web estándar se mejora simplemente extrayendo la lógica empresarial del código subyacente. En otras palabras, la página es la única solicitud de http. En otras palabras, MVP IMHO es un tipo de mejora evolutiva de forma web. Por otra parte, MVC cambia completamente el juego porque la clase de controlador intercepta la solicitud antes de que se cargue la página, la lógica de negocios se ejecuta allí y luego, al final del proceso, el controlador procesa los datos que se vuelcan a la página ("ver"). Sentido, MVC se ve (al menos para mí) mucho a la supervisión de MVP Controlador Supervisor mejorado con motor de enrutamiento

Ambos habilitan TDD y tienen desventajas y ventajas.

La decisión sobre cómo elegir uno de ellos IMHO debe basarse en cuánto tiempo se invirtió en el tipo de desarrollo web de ASP NET. Si uno se considerara bueno en formularios web, sugeriría MVP. Si uno no se siente tan cómodo en cosas como el ciclo de vida de la página, etc. MVC podría ser una manera de hacerlo aquí.

Aquí hay otro enlace de publicación de blog que ofrece un poco más de detalles sobre este tema.

http://blog.vuscode.com/malovicn/archive/2007/12/18/model-view-presenter-mvp-vs-model-view-controller-mvc.aspx


Aquí hay ilustraciones que representan el flujo de comunicación.





Creo que esta imagen de Erwin Vandervalk (y el article la acompaña) es la mejor explicación de MVC, MVP y MVVM, sus similitudes y sus diferencias. El article no se muestra en los resultados del motor de búsqueda para consultas sobre "MVC, MVP y MVVM" porque el título del artículo no contiene las palabras "MVC" y "MVP"; Pero creo que es la mejor explicación.

(El article también coincide con lo que dijo el tío Bob Martin en una de sus charlas: que MVC se diseñó originalmente para los pequeños componentes de la interfaz de usuario, no para la arquitectura del sistema)


En MVP, la vista extrae datos del presentador, que dibuja y prepara / normaliza datos del modelo, mientras que en MVC el controlador extrae datos del modelo y los configura, presionando la vista.

En MVP, puede tener una vista única que trabaje con varios tipos de presentadores y un presentador único que trabaje con diferentes vistas múltiples.

MVP usualmente usa algún tipo de marco de enlace, como el marco de enlace de Microsoft WPF o varios marcos de enlace para HTML5 y Java.

En esos marcos, la interfaz de usuario / HTML5 / XAML es consciente de qué propiedad del presentador muestra cada elemento de la interfaz de usuario, por lo que cuando vincula una vista a un presentador, la vista busca las propiedades y sabe cómo dibujar datos de ellos y cómo para establecerlos cuando el usuario cambia un valor en la interfaz de usuario.

Entonces, si, por ejemplo, el modelo es un automóvil, entonces el presentador es una especie de presentador de automóviles, expone las propiedades del automóvil (año, fabricante, asientos, etc.) a la vista. La vista sabe que el campo de texto llamado ''fabricante de automóviles'' necesita mostrar la propiedad del creador del presentador.

Luego, puede enlazar a la vista muchos tipos diferentes de presentadores, todos deben tener la propiedad Maker: puede ser de un avión, tren o lo que sea, a la vista no le importa. La vista extrae datos del presentador, sin importar cuál, siempre que implemente una interfaz acordada.

Este marco vinculante, si lo simplifica, en realidad es el controlador :-)

Y así, puedes ver a MVP como una evolución de MVC.

MVC es genial, pero el problema es que generalmente su controlador por vista. El Controlador A sabe cómo configurar los campos de la Vista A. Si ahora, desea que la Vista A muestre datos del modelo B, necesita que el Controlador A sepa el modelo B, o necesita que el Controlador A reciba un objeto con una interfaz, que es como MVP solo sin los enlaces, o necesita volver a escribir el código de conjunto de UI en el Controlador B.

Conclusión: MVP y MVC son ambos desacoplamientos de patrones de UI, pero MVP generalmente utiliza un marco de enlaces que está debajo de MVC. THUS MVP está en un nivel arquitectónico más alto que MVC y un patrón de envoltura por encima de MVC.


Esta es una simplificación excesiva de las muchas variantes de estos patrones de diseño, pero así es como me gusta pensar acerca de las diferencias entre los dos.

MVC

MVP


Hay muchas respuestas a la pregunta, pero sentí que se necesita una respuesta realmente simple que las compare claramente. Aquí está la discusión que inventé cuando un usuario busca el nombre de una película en una aplicación MVP y MVC:

Usuario: Haga clic en clic ...

Ver : ¿Quién es ese? [ MVP | MVC ]

Usuario: Acabo de hacer clic en el botón de búsqueda ...

Ver : Ok, espera un segundo ... [ MVP | MVC ]

( Ver llamando al presentador | Controlador ...) [ MVP | MVC ]

Ver : Hey Presenter | Controlador , un usuario acaba de hacer clic en el botón de búsqueda, ¿qué debo hacer? [ MVP | MVC ]

Presentador | Controlador : Hey View , ¿hay algún término de búsqueda en esa página? [ MVP | MVC ]

Vista : Sí, ... aquí está ... "piano" [ MVP | MVC ]

Presentador : Gracias, vista , ... mientras estoy buscando el término de búsqueda en el modelo , muéstrale una barra de progreso [ MVP | MVC ]

(El presentador | Controlador está llamando al modelo ...) [ MVP | MVC ]

Presentador | Controlador : Hola modelo , ¿Tiene alguna coincidencia para este término de búsqueda ?: “piano” [ MVP | MVC ]

Modelo : Hey Presenter | Controlador , déjame ver… [ MVP | MVC ]

(El modelo está haciendo una consulta a la base de datos de películas ...) [ MVP | MVC ]

( Después de un tiempo ... )

-------------- Aquí es donde MVP y MVC comienzan a diverge ---------------

Modelo : Encontré una lista para usted, presentador , aquí está en JSON “[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] "[ MVP ]

Modelo : Hay algún resultado disponible, Controlador . He creado una variable de campo en mi instancia y la he llenado con el resultado. Su nombre es "searchResultsList" [ MVC ]

(El presentador | Controlador agradece al modelo y vuelve a la vista ) [ MVP | MVC ]

Presentador : Gracias por esperar View , encontré una lista de resultados coincidentes para usted y los ordené en un formato presentable: ["Piano Teacher 2001", "Piano 1993"]. Por favor muéstralo al usuario en una lista vertical. También oculta la barra de progreso ahora [ MVP ]

Controlador : Gracias por esperar View , le he preguntado a Model sobre su consulta de búsqueda. Dice que ha encontrado una lista de resultados coincidentes y los ha almacenado en una variable llamada "searchResultsList" dentro de su instancia. Puedes conseguirlo desde allí. También oculta la barra de progreso ahora [ MVC ]

Vista : Muchas gracias Presenter [ MVP ]

Vista : Gracias "Controlador" [ MVC ] (Ahora la vista se está cuestionando: ¿Cómo debo presentar los resultados que obtengo del Modelo al usuario? ¿El año de producción de la película debe ser el primero o el último ...? estar en una lista vertical u horizontal? ...)

En caso de que esté interesado, he estado escribiendo una serie de artículos que tratan sobre patrones de arquitectura de aplicaciones (MVC, MVP, MVVP, arquitectura limpia, ...) acompañados de un repositorio de Github here . Aunque la muestra está escrita para Android, los principios subyacentes pueden aplicarse a cualquier medio.



Hay un bonito video de Uncle Bob donde explica brevemente MVC y MVP al final.

En mi opinión, MVP es una versión mejorada de MVC en la que básicamente separa la preocupación por lo que va a mostrar (los datos) de cómo se va a mostrar (la vista). Presenter incluye un poco la lógica de negocios de su UI, impone implícitamente los datos que deben presentarse y le proporciona una lista de modelos de vista tonta. Y cuando llegue el momento de mostrar los datos, simplemente conecte su vista (probablemente incluye la misma ID) en su adaptador y establezca los campos de vista relevantes usando esos modelos de vista con una cantidad mínima de código que se está introduciendo (solo usando configuradores). Su principal beneficio es que puede probar su lógica de negocio de UI en comparación con muchas / varias vistas, como mostrar elementos en una lista horizontal o vertical.

En MVC, hablamos a través de interfaces (límites) para pegar diferentes capas. El controlador es un complemento de nuestra arquitectura, pero no tiene tal restricción para imponer qué mostrar. En ese sentido, MVP es una especie de MVC con un concepto de vistas que se puede conectar al controlador a través de adaptadores.

Espero que esto ayude mejor.


He utilizado MVP y MVC y, aunque nosotros, como desarrolladores, tendemos a centrarnos en las diferencias técnicas de ambos patrones, el punto para MVP en IMHO está mucho más relacionado con la facilidad de adopción que cualquier otra cosa.

Si estoy trabajando en un equipo que ya tiene una buena experiencia en el estilo de desarrollo de formularios web, es mucho más fácil presentar MVP que MVC. Yo diría que MVP en este escenario es una victoria rápida.

Mi experiencia me dice que mover un equipo de formularios web a MVP y luego de MVP a MVC es relativamente fácil; Pasar de formularios web a MVC es más difícil.

Dejo aquí un enlace a una serie de artículos que un amigo mío ha publicado sobre MVP y MVC.

http://www.qsoft.be/post/Building-the-MVP-StoreFront-Gutthrie-style.aspx


Hice un blog sobre esto hace un tiempo atrás, citando la excelente publicación de Todd Snyder sobre la diferencia entre los dos :

Aquí están las principales diferencias entre los patrones:

Patrón MVP

  • La vista se acopla más libremente al modelo. El presentador es responsable de vincular el modelo a la vista.
  • La prueba de unidad es más fácil porque la interacción con la vista se realiza a través de una interfaz
  • Por lo general, ver al presentador mapear uno a uno. Las vistas complejas pueden tener múltiples presentadores.

Patrón MVC

  • El controlador se basa en comportamientos y se puede compartir entre vistas
  • Puede ser responsable de determinar qué vista mostrar

Es la mejor explicación en la web que pude encontrar.


La respuesta más simple es cómo la vista interactúa con el modelo. En MVP, la vista está vinculada al presentador, que actúa como intermediario entre la vista y el modelo, toma información de la vista, obtiene datos del modelo, luego realiza una lógica de negocios y finalmente actualiza la vista. En MVC, el modelo actualiza la vista directamente en lugar de retroceder a través del controlador.


MVP no es necesariamente un escenario en el que la vista está a cargo (consulte MVP de Taligent, por ejemplo).
Me parece desafortunado que la gente siga predicando esto como un patrón (Ver a cargo) en lugar de un anti-patrón, ya que contradice "Es solo una vista" (Programador Pragmático). "Es solo una vista" indica que la vista final que se muestra al usuario es una preocupación secundaria de la aplicación. El patrón MVP de Microsoft hace que la reutilización de Views sea mucho más difícil y convenientemente excusa al diseñador de Microsoft de alentar las malas prácticas.

Para ser perfectamente franco, creo que las preocupaciones subyacentes de MVC son válidas para cualquier implementación de MVP y las diferencias son casi enteramente semánticas. Mientras siga la separación de preocupaciones entre la vista (que muestra los datos), el controlador (que inicializa y controla la interacción del usuario) y el modelo (los datos y / o servicios subyacentes), entonces está obteniendo los beneficios de MVC . Si está obteniendo los beneficios, ¿a quién le importa realmente si su patrón es MVC, MVP o Supervisor Controller? El único patrón real permanece como MVC, el resto son sabores diferentes de él.

Considere this artículo altamente emocionante que enumera de manera integral varias de estas diferentes implementaciones. Puede notar que básicamente todos están haciendo lo mismo pero de forma ligeramente diferente.

Personalmente, creo que MVP solo se ha vuelto a introducir recientemente como un término pegadizo para reducir los argumentos entre fanáticos semánticos que argumentan si algo es realmente MVC o no o para justificar las herramientas de desarrollo rápido de aplicaciones de Microsofts. Ninguna de estas razones en mis libros justifica su existencia como un patrón de diseño separado.


Mi humilde vista corta: MVP es para escalas grandes, y MVC para escalas pequeñas. Con el MVC, a veces siento que la V y la C pueden verse dos lados de un solo componente indivisible bastante directamente ligado a la M, y uno de ellos cae inevitablemente cuando desciende a escalas más cortas, como los controles de UI y los widgets de base. En este nivel de granularidad, MVP tiene poco sentido. Cuando uno por el contrario va a escalas más grandes, la interfaz adecuada se vuelve más importante, lo mismo con la asignación inequívoca de responsabilidades, y aquí viene MVP.

Por otro lado, esta regla de escala de un pulgar puede tener muy poco peso cuando las características de la plataforma favorecen algún tipo de relación entre los componentes, como con la web, donde parece ser más fácil implementar MVC, más que MVP.


También vale la pena recordar que también hay diferentes tipos de MVP. Fowler ha dividido el patrón en dos: Vista pasiva y Controlador supervisor.

Cuando usa la vista pasiva, su vista generalmente implementa una interfaz detallada con propiedades que se asignan más o menos directamente al widget de la interfaz de usuario subyacente. Por ejemplo, puede tener un ICustomerView con propiedades como Nombre y Dirección.

Su implementación podría ser algo como esto:

public class CustomerView : ICustomerView { public string Name { get { return txtName.Text; } set { txtName.Text = value; } } }

Su clase de presentador hablará con el modelo y lo "mapeará" a la vista. Este enfoque se denomina "Vista pasiva". El beneficio es que la vista es fácil de probar y es más fácil moverse entre plataformas de UI (Web, Windows / XAML, etc.). La desventaja es que no puede aprovechar cosas como el enlace de datos (que es realmente poderoso en marcos como WPF y Silverlight ).

El segundo sabor de MVP es el Supervisor Controller. En ese caso, su Vista podría tener una propiedad llamada Cliente, que de nuevo está vinculada a los widgets de la interfaz de usuario. No tiene que pensar en sincronizar y microgestionar la vista, y el Supervisor Controller puede intervenir y ayudar cuando sea necesario, por ejemplo, con una lógica de interacción completa.

El tercer "sabor" de MVP (o alguien tal vez lo llamaría un patrón separado) es el Modelo de presentación (o, a veces, se refiere a Model-View-ViewModel). Comparado con el MVP, usted "combina" la M y la P en una clase. Tiene el objeto de cliente al que están vinculados los datos de sus widgets de UI, pero también tiene campos adicionales específicos de UI como "IsButtonEnabled", o "IsReadOnly", etc.

Creo que el mejor recurso que he encontrado para la arquitectura de UI es la serie de publicaciones de blog realizadas por Jeremy Miller en la tabla de contenidos de la serie Build Your Own CAB . Cubrió todos los sabores de MVP y mostró el código C # para implementarlos.

También he escrito en el blog sobre el patrón Model-View-ViewModel en el contexto de Silverlight en YouCard Re-visited: Implementando el patrón ViewModel .


MVC (Model View Controller)

La entrada se dirige primero al controlador, no a la vista. Esa entrada puede 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 con el que se conecta 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 renderizar en función de la operación que se está ejecutando. Observe la flecha unidireccional del controlador a la vista. 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, pero no el Controlador que lo está sirviendo.

MVP (presentador de vista de modelo)

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 con la que está asociado. El Presentador actualiza la Vista según las acciones solicitadas que realiza en el Modelo, pero la Vista no es consciente del Modelo.

Para mas Reference


Controlador de vista de modelo

MVC es un patrón para la arquitectura de una aplicación de software. Separa la lógica de la aplicación en tres partes separadas, promoviendo la modularidad y la facilidad de colaboración y reutilización. También hace que las aplicaciones sean más flexibles y acogedoras para las iteraciones. Separa una aplicación en los siguientes componentes:

  • Modelos para el manejo de datos y lógica empresarial.
  • Controladores para el manejo de la interfaz de usuario y la aplicación.
  • Vistas para el manejo de objetos de interfaz gráfica de usuario y presentación.

Para hacer esto un poco más claro, imaginemos una aplicación de lista de compras simple. Todo lo que queremos es una lista del nombre, la cantidad y el precio de cada artículo que necesitamos comprar esta semana. A continuación, describiremos cómo podríamos implementar algunas de estas funciones utilizando MVC.

Modelo-Vista-Presentador

  • El modelo son los datos que se mostrarán en la vista (interfaz de usuario).
  • La vista es una interfaz que muestra datos (el modelo) y enruta los comandos (eventos) del usuario al Presentador para actuar sobre esos datos. La vista suele tener una referencia a su presentador.
  • El presentador es el "hombre medio" (interpretado por el controlador en MVC) y tiene referencias tanto a la vista como al modelo. Tenga en cuenta que la palabra "Modelo" es engañosa. Más bien debería ser una lógica empresarial que recupere o manipule un modelo . Por ejemplo: si tiene un usuario que almacena la base de datos en una tabla de base de datos y su Vista quiere mostrar una lista de usuarios, el Presentador tendrá una referencia a la lógica empresarial de su base de datos (como un DAO) desde donde el Presentador consultará una lista. de los usuarios.

Si desea ver un ejemplo con una implementación simple, consulte this publicación de GitHub

Un flujo de trabajo concreto de consulta y visualización de una lista de usuarios de una base de datos podría funcionar así:

¿Cuál es la diferencia entre los patrones MVC y MVP ?

Patrón MVC

  • El controlador se basa en comportamientos y se puede compartir entre vistas

  • Puede ser responsable de determinar qué vista mostrar (patrón de controlador frontal)

Patrón MVP

  • La vista se acopla más libremente al modelo. El presentador es responsable de vincular el modelo a la vista.

  • La prueba de unidad es más fácil porque la interacción con la vista se realiza a través de una interfaz

  • Por lo general, ver al presentador mapear uno a uno. Las vistas complejas pueden tener múltiples presentadores.


MVP

MVP son las siglas de Model - View - Presenter. Esto llegó a la imagen a principios de 2007, donde Microsoft presentó las aplicaciones de Windows Smart Client.

Presenter actúa como un rol de supervisión en MVP que vincula los eventos y las lógicas de negocios desde modelos.

El enlace de eventos de vista se implementará en Presenter desde una interfaz de vista.

View es el iniciador de las entradas del usuario y luego delega los eventos al presentador y el presentador maneja los enlaces de eventos y obtiene datos de los modelos.

Pros: View solo tiene UI, no lógicas. Alto nivel de comprobabilidad.

Contras: poco complejo y más trabajo al implementar enlaces de eventos

MVC

MVC significa Model-View-Controller. El controlador es responsable de crear modelos y renderizar vistas con modelos de enlace.

El controlador es el iniciador y decide qué vista renderizar.

Pros: Énfasis en el principio de responsabilidad única Alto nivel de verificabilidad

Contras: en ocasiones, demasiada carga de trabajo para los Controladores, si se intenta representar varias vistas en el mismo controlador.


  • MVP = Model-View-Presenter
  • MVC = Model-View-Controller

    1. Ambos patrones de presentación. Separan las dependencias entre un Modelo (piense en objetos de Dominio), su pantalla / página web (la Vista) y cómo se supone que se comporte su UI (Presentador / Controlador)
    2. Son bastante similares en concepto, la gente inicializa el Presentador / Controlador de manera diferente según el gusto.
    3. Un gran artículo sobre las diferencias está here . Lo más notable es que el patrón MVC tiene el Modelo actualizando la Vista.