# MVVM- Model View ViewModel
## ¿Que es un Patrón de diseño?
Por definición, los patrones de diseño son:
> “Técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces.”
Existen muchos patrones de diseño, algunos se puede utilizar combinados entre sí y su uso dependerá del problema que queramos resolver con nuestro software.
No vamos a explicar a fondo que son patrones de diseño, la idea es que tengan una base de que son, ya que en este caso hablaremos específicamente de uno enfocado a Android.
Lee este artículo para saber algo más:
[Comparativa patrones de diseño para Android](https://alainnicolastello.medium.com/mvvm-es-el-mejor-patr%C3%B3n-de-dise%C3%B1o-para-android-alternativa-a-mvp-clean-96ed9dcc5d7e)
Como ves dada nuestra formación actual, usando kotlin y composer lo mejor es MVVM, profundicemos un poco. Dejo como tarea que miren qué plataformas usan MVC y MVP.
## ¿Que es MVVM?
MVVM, por sus siglas en ingles Model View ViewModel, es un patrón de diseño que tiene por finalidad separar la parte de la interfaz del usuario(de ahí la V de View) de la parte de la lógica del negocio(de ahí la M de Model), logrando así que la parte visual sea totalmente independiente. El otro componente es el ViewModel que es la parte que va a interactuar como puente entre la Vista y el Modelo.
## ¿Cómo aplica MVVM en Android?
Aqui se muestra graficamente como es que se implementa el MVVM en Android:

Android nos da una colección de librerías que nos pueden ser muy útiles a la hora de querer mejorar el desarrollo de nuestras apps llamadas Componentes de la arquitectura, en este caso nos centraremos en dos de las clases que estas librerías nos ofrecen
**ViewModel**
Esta clase será el intermediario entre nuestra vista y nuestra lógica del negocio, es la encargada de almacenar la información de la interfaz gráfica, ya que una de sus ventajas más grandes es que no se destruye en el cambio de orientación de nuestra aplicación.
**LiveData**
Esta clase nos sirve para compilar objetos de datos que nos permitirán notificar cuando algún valor sea modificado por la parte de la lógica del negocio, logrando con esto que la interfaz se entere y haga los ajustes necesarios.
