MVP (Model View Presenter) usando .NET

Ultimamente estuve revisando lo que es WCSF (Web Client Software Factory) entre todo el rollo ahi vi lo que es el patron MVP (Model View Provider), bueno mas antes lo vi cuando leia algo de patrones de arquitectura en el libro de Martin Fowler pero esas veces no le di tanta importancia.

Problema:

Anteriormente los que al igual que yo estaban en tiempos de ASP 3.0 recordaran el caos que se armaba con una sola pagina al mezclar codigo HTML con codigo fuente, a partir de aqui nacio la idea de separar el codigo fuente del diseño (osea HTML) esto ya vino con lo que es ASP.NET pues este paso fue grandioso aunque al principio duro de acostumbrarse, pero nos aligero el trabajo enormemente.

Bueno hasta aca tenemos el codigo separado del diseño, pero aun tenemos dependencia de la presentacion, es decir si bien podemos tener una arquitectura en capas aun tenemos muchas cosas en la presentacion y que si queremos pasar de web a windows pues el trabajo es aun arduo, y pues aca necesitamos algo, entonces porque no repetimos lo que se hizo al devidir la presentacion de el codigo, pero partamos al codigo (partamos en el buen sentido de la palabra), entonces coloquemos en un lado el codigo exclusivo que trabaje con los controles de la presentacion que tengamos y por otro el codigo de las llamadas a las capas manejo de entidades, etc. Pues aca en este entorno podemos usar MVP que es el patron que nos ayuda a resolver esto.

Historia MVP:

Pues comentarles que MVP nacio a partir del modelo MVC (Model View Controller) no hablaremos acerca de este, pero decirles que MVC fue usado por Smalltalk a partir de los años 80 (y yo recien enterandome y aprendiendo MVP) y de aca MVP es una mutacion si podriamos llamarlo asi que nace a partir de MVC.

Implementacion (Teoria):

Antes de nada quiero mostrarles el modelo

Modelo MVP

Donde View = Nuestra vista seria nuestro formulario windows o web (u otro segun la presentacion que tengamos).

IView = Es la interfaz que nuestro View implementa, es decir aca estaran todos los campos o controles que tendar nuestra vista

Presenter = Pos este es el mero mero, osea el que hace todo, aca se maneja las entidades, se llena datos en la vista, etc. en lo posible hay que tratar de que el codigo este en este miembro

Model = Es nuestra entidad, es decir las clases que representan nuestras entidades, donde se puede ver que solo el presenter tiene acceso a estas para luego mostrarlas en la vista.

Implementacion (Practica .NET):

Para este ejemplo no mostraremos codigo de capas, sino nos enfocaremos en lo que es el MVP solo la presentacion, para esto vamos a colocar un caso imaginario donde registramos a una persona a nuestro sistema, y tenemos la pantalla para este fin (View), nuestra pantalla windows quedaria asi (estoy usando paneles):

windows.jpg

En Web nuestra pantalla seria la siguiente (estoy usando un multiview):

web.jpg

hasta aca tenemos las pantallas tanto para windows como para web, que tendran el mismo objetivo, registrar a una persona.

Ahora dejemos de lado las pantallas y pensemos solo que tenemos una digamos windows, y nos tocaria hacer la interfaz (IView), hasta aca veamos la estructura del proyecto primero para ambientarnos:

proyecto.jpg

Noten que en el proyecto tengo View, IView, Presenter, pero no tengo Model porque seria mi entidad y en este caso estamos omitiendo las capas y la entidad formaria parte de una capa pero esto no nos detiene para realizar nuestro MVP. Continuemos con el IView

iview.jpg

como podran ver en el IView coloco las propiedades y metodos que tendra mi Vista (View) es decir colocamos todo lo que podremos manejar desde el Presenter. El siguiente paso seria que nuestra Vista (Formulario) implemente esta interfaz con lo que tendriamos:

vista.jpg

como veran implemento la interfaz en nuestra vista y en la parte guardar llamo a mi presenter (en seguida veremos como queda el presenter) donde el presenter es el que se encarga de realizar la operacion de guardar, ya sea llamando a un servicio de las capas o si no se esta manejando capas desde el mismo presenter, lo aconsejable siempre es trabajar con capas. Como dice Jack el destripador “Lo que importa es lo de adentro” asi que veamos como queda nuestro Presenter.

presenter.jpg

En nuestro Presenter manejamos los eventos que provoca nuestra Vista de esta forma tenemos que la mayor parte del codigo este en el Presenter.

Ahora para migrar esto a Web lo unico que hacemos es tener la vista (View), hacer que implemente la interfaz (IView) y listo lo demas funcionara igual, espero les sirva y posteriormente estare mostrando implementaciones mas avanzadas usando entidades y colecciones.

Hasta la proxima

KEV

Advertisement

6 comentarios hasta ahora

  1. walter on

    hola muy interesante tu ejemplo, podrías pasármelo para descargarlo??? ya que a mi no me funciono

    de antemano muchas gracias!!!

  2. oscar on

    Hola espero que estes muy bien,,,,,,te doy muchas gracias…..por publicar ejemplos como este…..sigue asi….y espero que me escriba al correo para estar mas en contacto……me gusta mucho la programacion …100% vb.net ….se le agradece de corazon….Saludos desde colombia!

  3. OSCAR on

    me parecio interesante el manejo mediante este modelamiento podrias decirme o poner el enlace para descargar el ejemplo o extender mas este tema con los ejemplos q colocaste.

    muchas gracias

  4. [...] el tema delos tutoralies, dejare uno respecto al uso del patron de diseño Model View Presenter. Este patron es una derivacion del MVC y la diferencia radica en que aqui se utiliza Interfaces [...]

  5. mathuml on

    excelente! gracias!

  6. [...] con este tutorial, respecto al uso del patron de diseño Model View Presenter. Este segunda parte, veremos las referencias que deben haber en la Solucion [...]


Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s

Seguir

Get every new post delivered to your Inbox.