Clean Architecture em aplicativos mobile com React Native
Uma visão didática de Clean Architecture aplicada a apps React Native: princípios, camadas, fluxo de dependências, trade-offs e quando usar.
Clean Architecture organiza o software para ser independente de frameworks, testável e fácil de evoluir. Em React Native, ela ajuda a separar regras de negócio da interface e da infraestrutura (APIs, banco local), reduzindo acoplamento e aumentando previsibilidade.
⸻
O que é Clean Architecture?
É um conjunto de princípios que defende separação em camadas com dependências apontando sempre para dentro (do externo para o interno), protegendo o núcleo do negócio de detalhes de implementação. O objetivo é facilitar troca de tecnologias (UI, banco, API) sem reescrever o domínio.
Ideias-chave: • Independência de framework: React/Redux/Zustand são detalhes de entrega. • Testes primeiro: regras de negócio testadas sem UI ou rede. • Separação de preocupações: domínio, casos de uso, interface e infraestrutura bem definidos. • Dependência invertida: camadas externas conhecem contratos internos, nunca o contrário.
⸻
Por que aplicar em React Native?
Apps mobile crescem rápido: múltiplas telas, offline, sincronização, cache, autenticação, analytics. Clean Architecture traz: 1. Escalabilidade: features novas sem quebrar as existentes. 2. Testabilidade: domínio e casos de uso isolados de UI e rede. 3. Flexibilidade tecnológica: trocar client HTTP, banco local ou serviço remoto sem tocar no domínio. 4. Colaboração: papéis claros entre frontend, backend e QA.
⸻
Estrutura sugerida (alto nível)
/app
/domain → entidades, value objects, regras de negócio, contratos (ports)
/application → casos de uso (use cases), orquestração de regras
/infrastructure→ adapters (HTTP, SQLite/AsyncStorage, Firebase), mapeamentos
/presentation → UI React Native (Views), gerência de estado (VM/MVI/store)
/core → utilitários, DI, logging, config
• Domain: o coração do app; não depende de React ou bibliotecas externas. • Application (use cases): coordena regras de negócio e conversa via ports com o mundo externo. • Infrastructure: implementa os adapters concretos (APIs, persistência, notificações, analytics). • Presentation: telas e componentes; exibe estado e dispara intenções (MVVM/MVI podem viver aqui).
A regra de ouro: Presentation → Application → Domain (setas para dentro). Infrastructure depende de Application/Domain, nunca o contrário.
⸻
Como o fluxo acontece 1. Usuário interage com a Presentation (View/Store). 2. A apresentação dispara um Use Case em Application. 3. O Use Case aplica regras do Domain e chama ports para obter/persistir dados. 4. Infrastructure fornece os adapters concretos que implementam os ports. 5. O resultado retorna à Presentation, que renderiza o novo estado.
Esse ciclo garante que mudanças em UI ou rede não contaminem o núcleo do negócio.
⸻
Benefícios práticos • Evolução segura: refatorar UI/infra sem reescrever regras. • Testes rápidos: Use Cases e Domain testados sem mock pesado de UI. • Onboarding fácil: novas pessoas entendem onde cada peça pertence. • Portabilidade: parte do núcleo pode ser reaproveitada (web/mobile/server).
⸻
Boas práticas 1. Domínio sem dependências externas: sem imports de React, fetch ou libs específicas. 2. Contratos (ports) estáveis: defina interfaces claras para repositórios/serviços. 3. Use Cases pequenos e expressivos: cada caso de uso deve ter propósito único. 4. Mappers/DTOs na borda: traduções entre API e Domain acontecem na Infrastructure. 5. Tratamento consistente de erros: converta falhas técnicas em erros de domínio compreensíveis. 6. Config e DI centralizados: injete adapters (API, cache, logger) na composição do app. 7. Estados explícitos na Presentation: carregando/erro/vazio/sucesso visíveis e testáveis. 8. Observabilidade: logging/telemetria por caso de uso e por feature.
⸻
Quando usar Clean Architecture • Produtos médios/grandes com roadmap extenso e equipe múltipla. • Apps que precisam funcionar offline, sincronizar dados e lidar com estados complexos. • Projetos que visam longevidade e troca de fornecedores (ex.: migrar de Firebase para Supabase/SQLite).
Em MVPs muito pequenos, comece simples; adote a estrutura aos poucos conforme o escopo cresce.
⸻
Relação com MVVM/MVI/MVC • Clean Architecture é um guarda-chuva de princípios. MVVM/MVI/MVC são padrões de apresentação que podem ocupar a camada Presentation. • Escolha MVVM quando quiser ViewModels ricos em estado derivado. • Escolha MVI quando precisar de fluxo unidirecional com rastreabilidade forte. • MVC pode ser útil em times que já falam MVC e pedem um Controller explícito.
O importante é manter o núcleo (Domain/Application) protegido e os detalhes (Presentation/Infrastructure) substituíveis.
⸻
Trade-offs e cuidados • Mais pastas e cerimônia: exige disciplina para não burocratizar. • Curva de aprendizado: demanda alinhamento do time em nomes e contratos. • Overengineering em MVPs: introduza conforme há sinais de crescimento/complexidade.
⸻
Conclusão
Aplicar Clean Architecture em React Native traz clareza, testabilidade e flexibilidade. Ao isolar Domain e Application dos detalhes de UI e Infrastructure, você reduz custos de manutenção e aumenta a vida útil do produto.
Em uma frase: proteja seu negócio do seu app — frameworks e serviços mudam, sua regra de negócio fica. Mantendo dependências para dentro, você constrói um mobile pronto para escalar e durar.
Anderson Lima
Software Developer
I'm a software engineer with over 10 years of experience building B2B and B2C platforms for fintech, healthcare, and education companies. Postgraduate in software architecture and solutions, I connect technical vision with business results to deliver experiences that make sense to people. I also mentor devs and creators in live classes, podcasts, and community initiatives focused on inclusive technology.
Related Articles
Continue exploring similar topics
Arquitetura MVVM em aplicativos mobile com React Native
O padrão MVVM (Model-View-ViewModel) é uma das formas mais eficientes de estruturar aplicativos React Native, principalmente quando o objetivo é escalar o código sem perder a clareza entre camadas de interface, regras de apresentação e acesso a dados.
Arquitetura MVC em aplicações web com Next.js
Como aplicar o padrão MVC em projetos Next.js para estruturar responsabilidades entre Model, View e Controller, mantendo clareza e escalabilidade.