Pular para conteúdo

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

// No ViewModel
val nome = MutableLiveData<String>()

fun carregar() {
    nome.value = "Ricardo"
}
// Na Activity
viewModel.nome.observe(this) { novoNome ->
    binding.txtNome.text = novoNome
}

🏗️ 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.

<TextView
    android:text="@{viewModel.userName}" />
  • Menos binding.textView.text = ... na Activity.
  • Código mais limpo.

🛠️ Prática da Aula: Contador MVVM

  1. Crie uma Activity com um botão e um texto.
  2. Crie um MainViewModel com um counter: MutableLiveData<Int>.
  3. No clique, chame counter.value = (counter.value ?: 0) + 1.
  4. 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.

class UserViewModel: ObservableObject {
    @Published var name = "Ricardo"
}

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.

❓ Dúvidas?


Próxima Aula: Persistência de Dados (Room)! 💾👋