O que é MVVM?
Published: 2023-08-11 14:23:37


Antes de mais nada, você sabe o que significa as siglas MVVM? Se você não sabe, tudo bem, fica tranquilo que neste artigo vamos te explicar tudo sobre a arquitetura MVVM, mas já de início te adiantamos o significado das siglas:

**M**: Model – Essa é a camada que terão as lógicas;
**V**: View – Essa é a camada que ficará tudo que for sobre UI
**VM**: View-Model - Essa camada é responsável por unir a View e o Model, além disso, faz operações sobre a camada Model quando for necessário.

As camadas de View e de Model não passam informações diretas uma a outra, por isso, o View-Model é tão importante dentro do MVVM. Ele faz o meio de campo entre as duas, sem que uma saiba da existência da outra.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8t3u5x63vuj1e9ikg9gw.png)

Agora que você já sabe o significado das siglas, vamos entender como são divididas as atividades dentro dos folders, que é uma das coisas mais importantes dentro do Android JetPack.


###Vantagens do MVVM

O MVVM nós trouxemos muitas vantagens e melhorias relacionadas as outras arquiteturas, como por exemplo, a MVP, que é uma evolução da MVC, uma outra arquitetura. Assim como o MVVM é uma evolução da MVP, e que tem suas melhorias sobre a outra arquitetura e vamos listar algumas vantagens para que você conheça um pouco mais sobre o MVVM antes de explicarmos mais sobre ele

- É mais fácil corrigir algum bug que tenha no código
- Separação de responsabilidades
- você pode criar testes unitários na ViewModel.



![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/akmja4oebv98tjzglkob.png)

###Padrão MVVM

O MVVM é um padrão de arquitetura utilizado pelos desenvolvedores para que o código fique mais limpo, para que cada classe/activity, seja responsável apenas por determinada função e execução de tarefa. Dessa forma, não temos uma Activity sobrecarregada e no momento da leitura e organização, fica bem mais fácil de conseguir ler o código.

Além do mais, uma Activity sobrecarregada pode deixar o seu aplicativo sem performar da melhor forma possível, e deixa o seu código confuso (acreditem já passei por isso e o MVVM me salvou depois que aprendi).


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1mgqx7rjrf2c9etdqfem.png)

Assim que batemos o olho neste código acima, fica muito difícil identificar qual a funcionalidade de cada uma dessas classes/activitys. Mas, graças ao MVVM, nós conseguimos deixar tudo organizado dentro de folders, o que facilita na hora de conectarmos os aplicativos.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kvvmrltcjgzju1stafk3.png)

Este é o padrão MVVM segundo o google, dentro da sua pasta java, assim ficam separadas as suas classes e as suas activity.

###Folders

Agora vamos te explicar o que fica dentro de cada uma dessas folders. 

**Model**: Tudo relacionado a base de dados, tanto uma base de dados interna, como por exemplo o Room, e uma base de dados remota.

**View**: Aqui fica tudo relacionado a UI do aplicativo, como falei acima, a regra de negócio do IMC fica dentro do folder Domain, e dentro da Activity, chamamos essa regra para mostre para o usuário, por exemplo, o resultado do seu IMC.

**ViewModel**: Como já mencionamos, ela é responsável por fazer o meio de campo entre o Model e a View. Mas como assim? De uma forma mais simples, o Model não sabe da existência da View, e a View não sabe da existência do Model. O ViewModel fica “observando” os dois, e tudo o que é a View precisa, que está dentro do Model, ele é responsável por enviar, e com o Model não é diferente.


- 
**Domain (opcional dentro do ViewModel)**: Dentro desse folder, fica tudo sobre as regras de negócio do seu aplicativo. Digamos que você está criando um aplicativo que calcula o IMC de uma pessoa, a regra do IMC ficara dentro deste folder, que depois será chamada apenas para ser mostrada dentro da Activity.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpbcnur8200gfg6uz6zi.png)

Depois dos folders criadas e organizadas, fica desta forma. Muito fácil de conseguir entender a que cada uma das classes e activitys se refere!!