Modelo-vista-presentador ( MVP ) es una derivación del patrón arquitectónico modelo-vista-controlador (MVC) y se utiliza principalmente para crear interfaces de usuario.
En MVP, el presentador asume la función de "intermediario". En MVP, toda la lógica de la presentación se envía al presentador. [1]
El patrón de software modelo-vista-presentador se originó a principios de los años 1990 en Taligent , una empresa conjunta de Apple , IBM y Hewlett-Packard . [2] MVP es el modelo de programación subyacente para el desarrollo de aplicaciones en el entorno CommonPoint basado en C++ de Taligent . El patrón fue posteriormente migrado por Taligent a Java y popularizado en un artículo del director técnico de Taligent, Mike Potel. [3]
Después de la discontinuación de Taligent en 1998, Andy Bower y Blair McGlashan de Dolphin Smalltalk adaptaron el patrón MVP para formar la base para su marco de interfaz de usuario Smalltalk. [4] En 2006, Microsoft comenzó a incorporar MVP en su documentación y ejemplos para la programación de interfaz de usuario en .NET Framework . [5] [6]
La evolución y las múltiples variantes del patrón MVP, incluida la relación de MVP con otros patrones de diseño como MVC, se analizan en detalle en un artículo de Martin Fowler [7] y otro de Derek Greer. [8]
MVP es un patrón arquitectónico de interfaz de usuario diseñado para facilitar las pruebas unitarias automatizadas y mejorar la separación de preocupaciones en la lógica de presentación:
Normalmente, la implementación de la vista crea una instancia del objeto presentador concreto y proporciona una referencia a sí mismo. El siguiente código de C# muestra un constructor de vista simple:
clase pública Presentador : IPresenter { public Presenter ( IView view ) { // ... } } clase pública Ver : IView { privada IPresenter _presenter ; Vista pública () { _presentador = nuevo Presentador ( this ); } }
El grado de lógica permitido en la vista varía entre las diferentes implementaciones. En un extremo, la vista es completamente pasiva y envía todas las operaciones de interacción al presentador. En esta formulación, cuando un usuario activa un método de evento de la vista, no hace nada más que invocar un método del presentador que no tiene parámetros ni valor de retorno. A continuación, el presentador recupera datos de la vista a través de métodos definidos por la interfaz de la vista. Por último, el presentador opera sobre 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 interacción, evento o comando en particular. 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 puede verse como una capa de presentador propia entre la capa de aplicación y la capa de interfaz de usuario .
El entorno .NET admite el patrón MVP de forma muy similar a cualquier otro entorno de desarrollo. El mismo modelo y la misma clase de presentador se pueden utilizar para admitir varias interfaces, como una aplicación web ASP.NET o una aplicación Windows Forms . El presentador obtiene y establece información desde/hacia la vista a través de una interfaz a la que se puede acceder mediante el componente de interfaz (vista).
Además de implementar manualmente el patrón, se puede utilizar un marco modelo-vista-presentador para respaldar el patrón MVP de una manera más automatizada.
En una aplicación Java ( AWT / Swing / SWT ), el patrón MVP se puede utilizar permitiendo que la clase de interfaz de usuario implemente una interfaz de vista.
El mismo enfoque se puede utilizar para aplicaciones web basadas en Java, ya que los marcos web modernos basados en componentes Java permiten el desarrollo de lógica del lado del cliente utilizando el mismo enfoque de componentes que los clientes pesados.
Para implementar MVP en Google Web Toolkit solo es necesario que algún componente implemente la interfaz de vista. El mismo enfoque es posible con Vaadin o el marco web Echo2 .
Los marcos de Java incluyen lo siguiente:
Gracias al entorno de ejecución flexible de PHP , existen amplias posibilidades de enfoques de la lógica de una aplicación. La implementación de la capa de modelo queda en manos del programador de la aplicación final.
Los marcos PHP incluyen los siguientes: