# Modelo–vista–presentador

Modelo–Vista–Presentador (MVP) es una derivación del patrón arquitectónico modelo–vista–controlador (MVC), y es utilizado mayoritariamente para construir interfaces de usuario.
En MVP el presentador asume la funcionalidad del "intermediario". En MVP, toda lógica de presentación es colocada al presentador.

## Descripción de patrón

MVP es un patrón arquitectónico de interfaz de usuario diseñada para facilitar pruebas de unidad automatizada y mejorar la separación de inquietudes en lógica de presentación:
* El modelo es una interfaz que define los datos que se mostrarán o sobre los que actuará la interfaz de usuario.
* El presentador actúa sobre el modelo y la vista. Recupera datos de los repositorios (el modelo), y los formatea para mostrarlos en la vista.
* La vista es una interfaz pasiva que exhibe datos (el modelo) y órdenes de usuario de las rutas (eventos) al presentador para actuar sobre los datos.
Normalmente, la vista de implementación instancia el objeto de presentador en concreto, proporcionando una referencia a él. El siguiente código C# demuestra una simple vista de un constructor, donde ConcreteDomainPresenter implementa la interfaz IDomainPresenter:
El grado de la lógica permitida en la vista varía entre las diferentes implementaciones.
* En un extremo, donde la vista es totalmente pasiva, simplemente reenvía todas las operaciones de interacción hacia el presentador. En esta formulación, cuando un usuario activa un método de evento de la vista, esta no hace más que invocar un método del presentador que no tiene parámetros y no devuelve ningún valor. El presentador recupera entonces datos de la vista a través de los métodos definidos por la interfaz de vista. Por último, el presentador opera en el modelo y actualiza la vista con los resultados de la operación.
* Otras versiones de modelo-vista-presentador permiten cierta libertad con respecto a qué clase maneja una determinada interacción, evento o comandos. Esto suele ser más adecuado para arquitecturas basadas en la Web, donde la vista, que se ejecuta en el navegador de un cliente, puede ser el mejor lugar para manejar una interacción o comando en particular.
Desde un punto de vista de capas, la clase de presentador podría considerarse como perteneciente a la capa de aplicación en un sistema de arquitectura multicapa, pero también pueda ser visto como capa de presentador de su propiedad entre la capa de aplicación y la capa de interfaz del usuario.

## Implementación en .NET

El entorno .NET apoya el patrón MVP mucho como cualquier otro entorno de desarrollo. La misma clase modelo y presentador pueden usar soporte interfaces múltiples, como un Aplicación web ASP.NET, una aplicación de Windows Form, o una aplicación Silverlight. El presentador obtiene y establece la información de/a la vista a través de una interfaz que se puede acceder por el componente de la interfaz (vista).
Además de implementar manualmente el modelo, un marco modelo-vista-presentador puede ser utilizado para apoyar el patrón MVP de una manera más automatizada. A continuación se muestra una lista de tales marcos bajo la plataforma .NET.

### Marcos .NET

* Claymore Archivado el 30 de junio de 2011 en Wayback Machine.
* MVC# Framework
* Fábrica de Software de Cliente de web
* Evolution.Net MVP Marco
* ASP.NET Web Forms Model-View-Presenter (MVP)
* Núcleo Archivado el 9 de julio de 2017 en Wayback Machine..NET Archivado el 9 de julio de 2017 en Wayback Machine.
* WinForms MVP Archivado el 18 de julio de 2017 en Wayback Machine.
* CRUD Killer es un conjunto de plantillas de CodeSmith para un desarrollo rápido

## Implementación en Java

En una aplicación Java (AWT/Swing/SWT), el patrón MVP puede ser utilizado dejando la clase de interfaz del usuario implementar una interfaz de vista.
La misma aproximación puede ser utilizada para aplicaciones basadas en web Java, desde modernos marcos Web basados en componentes Java permiten el desarrollo de la lógica del lado del cliente utilizando el mismo enfoque de componentes como clientes gruesos.
Implementando MVP en Web de Google Toolkit requiere sólo que algún componente implementa la interfaz de vista. La misma aproximación es posible utilizando el marco Web Eco2.
MVP Puede ser implementado en Java SE (AWT y Swing) las aplicaciones que utilizan los marcos Biscotti y MVP4J.

### Marcos Java

* MVP4J
* Eco2
* Web de Google Toolkit
* GWT-Plataforma
* JFace
* CSwing
* Vaadin
* ZK
* Ejemplo de Presentador de Vista de modelo del GWT proyecto.
* Modelo-Vista-pensamientos de implementación del Presentador en StackExchange