Cómo implementar el patrón de diseño MVVM en Android

¿Qué es model view view model?

es un patrón de diseño derivado del MVP, el cual a su vez está inspirado en MVC, pero no vamos a entrar en detalle en la historia y toda esta parte teórica. En su lugar nos centraremos en explicar cómo funciona cada parte de este patrón y de esta forma tener más adelante una perspectiva general de en qué nos beneficia y por qué es recomendable implementarlo dentro de nuestros proyectos. Vamos entonces a comenzar a explicar sus capas brevemente.

View

Es la vista y básicamente su responsabilidad cae con la información mostrada al usuario y como éste interactúa con ella para solicitar algún tipo de respuesta a través de la interfaz del usuario.

Modelo

El modelo de datos es una o más clases que se encargarán de proveer datos a nuestra aplicación no importa la fuente, ya sea una base de datos local, remota o incluso otras fuentes.

View model

La vista modelo es la capa intermedia que se va a comunicar con las dos anteriores.

Funcionamiento

Vamos a comenzar por decir cómo es que se comunica con la vista ya que después de hacerlo eso no se van a tomar las decisiones respecto a qué hacer con las acciones del usuario, ya que si bien la vista se encarga de recibir esa información de forma directa solamente se va a limitar a notificarle a view model, que el usuario hizo algo y listo su trabajo ha terminado.

Es aquí donde bien model toma el control y comienza a conseguir los datos, pero recordemos para eso tenemos otra capa ya mencionada el model. Entonces nuestro view model se encarga de solicitar la información precisa al modelo de datos y una vez que recibe la respuesta se lo asigna a donde es correspondiente para que la vista sea actualizada y muestre los cambios o en su defecto que ocurra un cambio interno.

En resumen, la vista muestra la información y detecta las acciones del usuario con su interfaz. El view model recibe esas acciones y solicita datos al model, puede tomar decisiones o simplemente asignar nuevos valores a la vista. Y por su parte el modelo se limita a proveer datos cuando se solicitan.

Ventajas

Finalmente, qué ventajas tiene el aplicar un patrón de diseño como éste a nuestras aplicaciones en Android. Bueno la respuesta corta, nos va a organizar mejor nuestro código y por lo tanto podremos ofrecer algo más legible, reutilizable, limpio y por consecuencia reducir los costos de mantenimiento o comprensión frente a otros desarrolladores. También nos facilita otras tareas más avanzadas por si después queremos implementarlas como la inyección de dependencias, testing, el cambio de back-end y mucho más.

Por último, me gustaría decir que no hay un patrón de diseños definitivos, muchas veces me pregunta cuál es el mejor y cómo es que hay que aplicarlo con precisión. La respuesta es que mientras respetemos los principios que nos proponen cada patrón, todos pueden llegar a ser realmente buenos y entre más patrones incluyamos de forma armónica mejor será la arquitectura de software que podamos implementar en nuestros proyectos. En MVVM es sólo uno de los más populares.