Aula 07 - Arquitetura MVVM 🏗️
🦸 O Problema da God Activity
Sua Activity faz tudo? * Chama a internet. * Valida campos. * Salva no banco. * Desenha a tela.
Isso é um pesadelo de manutenção! 😱
📐 O Padrão MVVM
Recomendado pelo Google (Android Jetpack).
- Model: Dados e Lógica de Negócio.
- View: UI (Activity/XML). Burra e Visual.
- ViewModel: O cérebro. Faz a ponte entre os dois.
O Fluxo de Dados
graph LR
V[View] -->|Ações| VM[ViewModel]
VM -->|Observa| V
VM <-->|Dados| M[Model/Repo]
🧠 O ViewModel
Seu maior superpoder: Sobrevivência.
- Quando você gira a tela, a Activity morre e renasce.
- O ViewModel permanece vivo na memória.
- Os dados não são perdidos! 💎
📡 LiveData
O mensageiro que respeita a vida.
- É um container de dados observável.
- A View diz: "Me avise quando o dado mudar".
- Se a View estiver em background, o LiveData espera ela voltar para avisar.
Exemplo de LiveData
🏗️ Camada Model & Repository
Não deixe o ViewModel saber de ONDE vêm os dados.
- O Repository decide: "Vou buscar na Internet ou no Banco local?"
- O ViewModel apenas pede: "Me dê a lista de usuários".
🆚 MVVM vs Outros
| Padrão | Característica |
|---|---|
| MVC | Controller fica sobrecarregado. |
| MVP | Presenter e View muito acoplados. |
| MVVM | View observa o ViewModel (Desacoplado). |
🧪 Benefícios para Testes
Testar UI é lento e caro. Testar lógica no ViewModel é fast & cheap. ⚡
Com MVVM, você testa a lógica sem precisar abrir o emulador.
🧬 Data Binding (Avançado)
Imagine ligar o dado do ViewModel direto no XML.
- Menos
binding.textView.text = ...na Activity. - Código mais limpo.
🛠️ Prática da Aula: Contador MVVM
- Crie uma Activity com um botão e um texto.
- Crie um
MainViewModelcom umcounter: MutableLiveData<Int>. - No clique, chame
counter.value = (counter.value ?: 0) + 1. - Observe o contador na Activity.
O Segredo da Rotação 🔄
Teste seu app: 1. Clique 5 vezes (Contador = 5). 2. Gire o celular. 3. Se o contador continuar em 5, você implementou MVVM corretamente! ✅
🆚 MVVM no iOS
No iOS moderno usamos @StateObject e @Published.
O conceito de "Reatividade" é o mesmo!
📊 Vantagens Reais
- Manutenibilidade: Código organizado por pastas.
- Escalabilidade: Fácil adicionar novas telas.
- Performance: UI Thread fica livre para animações.
🏁 Conclusão
- Não seja um refém da
MainActivity. - Use o ViewModel para guardar o estado.
- Deixe o LiveData atualizar sua tela.