Pular para o conteúdo

Boas práticas e padrões · Arquitetura do código · 5 min de leitura

Repository

Uma coleção do domínio que esconde de onde os dados vêm — API, banco local ou cache — e decide a estratégia offline.

ViewModel → TarefasRepository: observaobserva1TarefasRepository → Room: FlowFlow2TarefasRepository → API: sincronizasincroniza3API → Room: gravagrava4ViewModelViewModelTarefasRepository — fonte da verdadeTarefasRepositoryfonte da verdadeRoom — banco localRoombanco localAPI — redeAPIrede

Arraste para o lado para ver o diagrama inteiro.

A tela sempre lê do banco local (rápido e offline); a sincronização grava no banco, e o Flow avisa a tela da mudança.

O padrão

Fowler descreve o Repository como uma interface "parecida com uma coleção" para objetos do domínio. Ele concentra a decisão de onde buscar e como manter consistente: cache em memória, banco local, rede.

Offline-first

O guia de arquitetura do Android recomenda o banco local como fonte única da verdade: a UI observa o banco; a rede só atualiza o banco. Resultado: abre instantâneo, funciona sem internet e não tem estados contraditórios.

Boas práticas

  • Exponha modelos do domínio, não DTOs nem entidades do Room.
  • Funções suspend para ações e Flow para dados observáveis.
  • Trate erros de rede no repositório e devolva tipos do domínio.

No código

✓ ExemploKotlin
class TarefasRepository(private val dao: TarefaDao, private val api: TarefasApi) {
  // a tela observa o banco: abre na hora e funciona offline
  val tarefas: Flow<List<Tarefa>> = dao.observarTodas().map { lista -> lista.map(TarefaEntity::paraDominio) }

  suspend fun sincronizar(): Result<Unit> = runCatching {
    val remotas = api.listar()
    dao.substituirTodas(remotas.map(TarefaDto::paraEntity))
  }

  suspend fun concluir(id: Long) {
    dao.marcarConcluida(id) // otimista: a tela já atualiza
    runCatching { api.concluir(id) }.onFailure { dao.agendarReenvio(id) }
  }
}

A UI nunca fala com a API. Se a rede falha ao concluir, a tarefa continua concluída localmente e o envio é reagendado.

Em resumo

Referências

Continue aprendendo

Todos os temas de boas práticas e padrões →