Tiempo de lectura: 3 minutos

Model View Presenter (MVP) en Android

Seguramente este post llegue tarde pues creo que este patrón a día de hoy es más que conocido en la comunidad Android. No obstante, he decidido crear una entrada en el blog simplemente para enfrentarme a la situación de tener que definirlo.

La primera vez que escuché este termino fue en la Droidcon de Madrid 2014 y desde ese día no he parado de buscar información, de probarlo en varias aplicaciones y creo que ahora mismo, es lo mínimo que debe de aplicarse. Aunque ya lleva unos años usándose en Android, este patrón no es algo nuevo, la comunidad ‘windows’ lo lleva aplicando desde hace décadas.

El patrón MVP es un patrón de arquitectura y tiene como finalidad separar los datos de presentación de la lógica. Así de sencillo. Una actividad o un fragmento no deja de ser una vista y meter lógica aquí nos llevaría a acoplar parte de nuestro modelo de negocio a la vista. Es por eso que para evitar esto, aplicamos MVP.

¿Qué elementos intervienen? El patron MVP está compuesto por:

  • Actividad o Fragmento: la vista. Tendrá métodos que realizaran una acción en la interfaz de usuario, por ejemplo, mostrar un dialogo, cargar datos en un listado, recoger un evento producido por algún componente, etc.
  • Interfaz con los eventos que se quieren ejecutar en la vista. Esta interfaz será implementada por la actividad o fragmento y será pasado como parámetro al presentador.
  • Presentador. Es la clase encargada de recoger eventos desde la vista, ejecutar una acción y si es necesario, volver a interactuar con la vista a través de la interfaz. Normalmente, esa acción consiste en ejecutar un caso de uso, pero no quiero profundizar ahora en esto pues lo veremos más adelante en la entrada de Arquitectura Clean.

Cosas a tener en cuenta: El Presentador es completamente independiente al framework Android. Con esto quiero decir, que el presentador sólo tendrá código java, no puede tener ninguna referencia al framework. Recuerda que para interactuar con la vista, usamos la interfaz.

Una cosa muy común cuando se desarrolla con este patrón, es incluir nombre de métodos que coinciden con el ciclo de vida de la actividad en una interfaz que será implementada por el presentador. Personalmente es algo que no me gusta, pues tengo la sensación de que, aunque no hagamos referencia directa al framework Android, si lo estamos haciendo de forma indirecta.

¿Qué diferencias hay con el MVC? Pues la principal es que con el patrón MVC la vista puede acceder directamente al modelo y en el patrón MVP es el presentador quién se encarga. En la siguiente imagen se puede ver más claro.

MVP VS MVC