2009-08-23 40 views
48

¿Puede alguien explicar de la manera más simple posible qué es el patrón Model View Presenter? ¿Cuál es la diferencia con Model View Controller? ¿Cuál es el mejor o para qué propósito?¿Qué es Model View Presenter?

Respuesta

28

Martin Fowler tiene una página sobre patrones de diseño de interfaz de usuario, en la que define y luego habla sobre MVC, MVP y otros patrones.

http://martinfowler.com/eaaDev/uiArchs.html

Para resumir las diferencias, los controladores de la MVC tienen un mayor control sobre la interfaz de usuario, y controlar los eventos, mientras que un presentador en el MVP es más pasivo, y apenas presenta información a través de la interfaz de usuario.

En general, no hay mucha diferencia, y a menudo la línea entre ellos es borrosa.

+7

En cualquier caso, usted está involucrado con modelos, y eso tiene que ser un buen cosa. –

54

Model View Presenter y Model View Controller intentan resolver el mismo problema de "separación de preocupaciones".

La principal diferencia que encontrará es que Model View Controller (MVC) a menudo se implementa con un acoplamiento entre la vista y algún modelo; por lo tanto, una vista determinada está específicamente diseñada para proporcionar una visualización de un objeto dado (modelo).

En el patrón de modelo de vista de modelo, generalmente, el presentador se ocupa de trabajar con el modelo y decide qué información se necesita para formar algún tipo de visualización.

En este diagrama, las flechas representan dependencias:

MVC and MVP dependencies

Normalmente se escucha esta discusión patrón de llegar al discutir el marco ASP.NET MVC, y nos hemos encontrado información sobre el patrón MVP y su implementación en ASP.NET WebForms. En mi experiencia, es común que se piense que WebForms es en sí mismo un marco modelado por MVP: esto no es cierto. WebForms embargo, no hacen que sea muy fácil de poner en práctica un patrón MVP - su mejor recurso para esto sería investigar la Fábrica de Software de cliente Web a partir de los patrones y las prácticas del equipo:

CodePlex sitio: http://www.codeplex.com/websf

Una gran cubierta screencast el tema: http://www.pnpguidance.net/Screencast/MVPBundleScreencastWCSFModelViewPresenterDesignPattern.aspx

+0

No estoy seguro de que esas flechas de dependencia sean correctas. En MVC, ¿por qué la Vista tiene una dependencia en el Modelo? –

+2

Sin duda * no *, sin embargo, esta es la implementación más común.Por ejemplo, si utiliza ASP.NET MVC, la mejor práctica es hacer que su "vista" dependa de un tipo (creando una vista fuertemente tipada). Las implementaciones típicas de MVC envían un modelo a una vista, luego dejan que la vista decida qué hacer con él (creando así una dependencia), mientras que en MVP, la Vista literalmente le preguntará al presentador "¿Qué datos debo poner en este cuadro de texto?" – apiguy

+0

Hay una muy buena implementación de este patrón http://www.mvpwebforms.com – hakan

3

Dolphin Smalltalk solía tener una implementación de MVC pero luego migraron a MVP.

Aquí está the technical paper que describe lo que hicieron y por qué.

El sistema Taligent de IBM también usó MVP - describen qué y por qué here.

+0

TwistingTheTriad.PDF link ya no funciona. – Xonatron

+1

Han arreglado la URL "Twisting the Triad". – daf

+0

@daf Estaba realmente interesado en leer pero TwistingTheTriad.PDF va a una página en blanco actualmente = ( – Coops

4

Fowler separa MVP en 2 patrones: Supervising Presenter y Passive View.
Aviad Ezra tiene un buen artículo sobre este tema http://aviadezra.blogspot.com/2008/10/model-view-presenter-design-pattern.html.
Creo que MVP es mejor para escritorio, y MVC es para aplicación web, porque en el escritorio, el modelo tiene la capacidad de plantear el evento

+0

Encontré el artículo mencionado por Aviad Ezra bastante útil para comenzar a usar el patrón de arquitectura MVP con mi aplicación de escritorio WinForms. El código de ejemplo incluido es fácil de entender. – DavidRR

+0

Puede generar eventos utilizando llamadas ajax o websockets. Se trata de la parte del servidor en realidad. – hakan

Cuestiones relacionadas