📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados na Especialização em Android Nativo. Recomendado revisar antes de iniciar.

🏛️ P19: Banco de Wakanda (MVVM & Room)

v1.0 — Android Jetpack, Kotlin, Arquitetura MVVM em Camadas, Injeção com Dagger Hilt, Room Database, Padrão Repository e StateFlow Reativo

Série Prática Android Clássico — Projeto 19 de 21


🏛️ Visão Geral & Arquitetura Visual

O projeto Banco de Wakanda consolida a arquitetura corporativa recomendada pelo Google para engenharia de aplicativos móveis no Android: Model-View-ViewModel (MVVM) aliada à injeção de dependências com Dagger Hilt, desacoplamento da camada de dados via Repository Pattern, persistência local transacional com Room Database e exposição de estados de tela imutáveis através de StateFlow. O app gerencia a conta do tesouro real de Vibranium com histórico de transações e saldo consolidado.

Fluxo Visual do Banco de Wakanda com MVVM e Room

📁 Estrutura de Pastas Anti-Colisão

Todas as camadas arquiteturais, módulos Hilt e telas residem na subpasta canônica mobile-android-kotlin/:

catalogo_projetos/android_p19_banco_mvvm_hilt/
├── assets/
│   ├── mockup_banco_fluxo.svg
│   ├── screenshot_01_banco_vazio.svg
│   ├── screenshot_02_banco_sincronizado.svg
│   └── screenshot_03_banco_dialog.svg
├── mobile-android-kotlin/
│   ├── app/
│   │   ├── src/
│   │   │   └── main/
│   │   │       ├── java/br/com/curso/bancowakanda/
│   │   │       │   ├── di/
│   │   │       │   │   └── DatabaseModule.kt
│   │   │       │   ├── data/
│   │   │       │   │   ├── TransacaoEntity.kt
│   │   │       │   │   └── TransacaoDao.kt
│   │   │       │   ├── repository/
│   │   │       │   │   └── ContaRepository.kt
│   │   │       │   ├── ui/
│   │   │       │   │   ├── ContaViewModel.kt
│   │   │       │   │   └── MainActivity.kt
│   │   │       └── res/
│   │   └── build.gradle
│   ├── gradle/
│   ├── build.gradle
│   ├── gradlew
│   ├── settings.gradle
│   └── README.md
└── index.md

🧑‍💼 Engenharia de Software & Especificação Formal

1. Histórias de Usuário (User Stories)

ID Persona Narrativa da Funcionalidade Critério de Aceitação Principal Prioridade
US-01 Cidadão de Wakanda Quero visualizar meu saldo de Vibranium no topo da tela com atualização reativa. Exibição do valor consolidado a partir do StateFlow da ViewModel. Alta
US-02 Cidadão de Wakanda Quero registrar depósitos e retiradas de Vibranium através de um diálogo rápido. Inserção atômica no banco Room e recálculo instantâneo do saldo. Alta
US-03 Engenheiro de Software Quero que a Activity não saiba como os dados são gravados no SQLite. Isolamento estrito através do padrão Repository e ViewModel. Alta
US-04 Engenheiro de Software Quero injetar o repositório na ViewModel automaticamente via Hilt. Anotação @HiltViewModel com @Inject constructor. Média
US-05 Engenheiro de QA Quero testar a ViewModel fornecendo um repositório mockado sem tocar no banco de dados. Testes unitários com Coroutines Test e StandardTestDispatcher. Baixa

2. Requisitos do Sistema

Requisitos Funcionais (RF)

Requisitos Não-Funcionais (RNF)


3. Diagrama de Casos de Uso

flowchart TD
    User([fa:fa-user Cidadão / Usuário])
    VM[(fa:fa-layer-group ContaViewModel)]
    Repo[(fa:fa-boxes-packing ContaRepository)]
    DB[(fa:fa-database Room Database)]

    subgraph AppWakanda ["🏛️ Banco de Wakanda (mobile-android-kotlin)"]
        UC01["Consultar Saldo Consolidado"]
        UC02["Efetuar Lançamento de Transação"]
        UC03["Recalcular Saldo Atômico"]
        UC04["Atualizar Lista no RecyclerView"]
        UC05["Injetar Dependências com Hilt"]
    end

    User --> UC01
    User --> UC02
    UC01 --> VM
    UC02 --> VM
    VM --> Repo
    Repo --> DB
    DB -.->|Flow| Repo
    Repo -.->|StateFlow| VM
    VM -.->|StateFlow| UC04

4. Matriz de Rastreabilidade (RTM)

ID Requisito História de Usuário Artefato de Código Teste de Aceitação
RF-01 US-02 mobile-android-kotlin/app/.../TransacaoEntity.kt testEntityProperties()
RF-02 US-02 mobile-android-kotlin/app/.../TransacaoDao.kt testDaoInsertAndList()
RF-03 US-03 mobile-android-kotlin/app/.../ContaRepository.kt testRepositoryAbstraction()
RF-04 US-01 mobile-android-kotlin/app/.../ContaViewModel.kt testViewModelEmitsUiState()
RF-05 US-04 mobile-android-kotlin/app/.../DatabaseModule.kt testHiltDatabaseInjection()

🛠️ Implementação Guiada (ContaViewModel.kt)

ℹ️ O trecho de código que ficava aqui não correspondia ao código do projeto e foi retirado. Consulte os arquivos em mobile-android-kotlin.


🚀 Como Executar no Laboratório

1. Navegue até a subpasta do projeto

cd catalogo_projetos/android_p19_banco_mvvm_hilt/mobile-android-kotlin

2. Compile e execute os testes de unidade

./gradlew test
./gradlew assembleDebug

🏁 Matriz de Checkpoints de Conclusão

Checkpoint Meta Técnica Critério de Aceite Status
CP-01 Injeção Hilt Completa Grafo de dependências gerado pelo KSP sem conflitos PASS ✅
CP-02 Arquitetura MVVM Separação estrita entre View, ViewModel e Repository PASS ✅
CP-03 Persistência Relacional Entidades e transações gravadas no Room SQLite PASS ✅
CP-04 Reatividade com StateFlow UI atualizada automaticamente com collectAsStateWithLifecycle PASS ✅
CP-05 Suíte de Testes Automatizados Testes unitários com repositório mockado aprovados com 100% PASS ✅