O que a Arquitetura Frontend Realmente É (e o que Não É)
Arquitetura frontend é a estrutura intencional de limites na sua base de código. Não é o nome do framework que você instalou via npm.
Conteúdo
O erro de diagnóstico mais comum no desenvolvimento web moderno soa assim: “Nossa arquitetura frontend é React com Tailwind.”
React é uma biblioteca de UI. Tailwind é um sistema de estilo. Nenhum dos dois é uma arquitetura.
Se você acredita que seu framework é sua arquitetura, você deixará de tomar decisões estruturais. Você deixará o roteador de arquivos padrão do framework ditar o fluxo dos seus dados. Você deixará seus componentes buscarem seus próprios dados, gerenciarem sua própria lógica de domínio e lidarem com seu próprio estilo, tudo no mesmo arquivo. Isso não é arquitetura. É uma bolha indomável de complexidade acidental esperando para ossificar.
Arquitetura Frontend é o design intencional de limites.
Arquitetura como um Sistema de Limites
A boa arquitetura permite que as equipes alterem uma parte de um sistema sem quebrar todo o resto. Ela faz isso impondo limites.
O Limite do Componente (Separação de Preocupações)
A clássica Separação de Preocupações significava dividir HTML, CSS e JavaScript em arquivos separados. O desenvolvimento moderno orientado a componentes mudou isso: agora agrupamos o código por recurso, não por tipo de arquivo.
No entanto, a preocupação ainda existe. Um componente de UI não deve montar URLs de API, analisar JSON bruto em objetos de domínio, impor regras de negócios e renderizar marcação tudo de uma vez.
graph TD
subgraph A Bolha (Arquitetura Acidental)
B1[Componente Botão] -->|Busca Dados| B2(Resposta Bruta da Rede)
B1 -->|Analisa| B3(Lógica de Domínio)
B1 -->|Renderiza| B4(UI)
end
subgraph O Limite (Arquitetura Disciplinada)
D1[Camada de Dados] -->|Normaliza| D2[Camada de Domínio]
D2 -->|Passa Props| P1[Camada de Apresentação]
end
Um exemplo de Arquitetura Acidental: Um componente React UserProfile chama fetch(), verifica manualmente se user.age > 18 e então retorna um selo vermelho se a verificação falhar. Se a regra de idade mudar para 21, você terá que caçar todos os componentes de UI que verificam manualmente a idade.
Um exemplo de Disciplina de Limite: Um módulo de domínio User dedicado exporta uma função canDrinkAlcohol(user). O componente UserProfile importa essa função. A UI sabe como renderizar o selo vermelho; o módulo de domínio conhece as regras.
O Limite de Estado
O estado deve ter o escopo mais restrito possível.
- Estado Local: Preocupações efêmeras de UI. Este dropdown está aberto? O que está digitado neste input? (Pertence ao componente).
- Estado de Recurso: Estado compartilhado dentro de um domínio de recurso específico. (Pertence a um provedor de contexto ou store com escopo de recurso).
- Estado Global: Estado que o aplicativo inteiro precisa saber, como o usuário logado no momento ou o tema selecionado. (Pertence a uma store global).
O Modo de Falha: Colocar um booleano como isDropdownOpen em uma store Redux global. Isso acopla um detalhe microscópico da UI à arquitetura global, forçando re-renderizações desnecessárias.
O Limite de Renderização
Nem todos os pixels são criados iguais. A arquitetura exige decidir onde e quando o código se transforma em HTML.
Se você tratar um site de marketing e um painel SaaS complexo da mesma maneira, você está falhando na arquitetura. Um site de marketing exige uma Estratégia de Renderização estática para SEO e velocidade. Um painel SaaS exige interatividade do lado do cliente. Escolher o limite de renderização errado impõe penalidades permanentes de desempenho.
Os Quatro Modos de Arquitetura
Diferentes formas de produtos exigem sistemas de limites inteiramente diferentes.
1. A Publicação de Conteúdo (ex: Interface Atlas)
- Limite Principal: O Modelo de Conteúdo (Arquitetura da Informação).
- Estado: Mínimo ou inexistente.
- Renderização: HTML estático com ilhas interativas seletivas.
- Foco da Arquitetura: Garantir que o conteúdo seja desacoplado dos componentes de layout para que possa ser consultado e reutilizado.
2. A Aplicação de Página Única (SPA)
- Limite Principal: Estado do lado do cliente e roteamento.
- Estado: Caches de cliente complexos e altamente normalizados.
- Renderização: CSR ou SSR de página inteira/Hidratação.
- Foco da Arquitetura: Gerenciar a sincronização entre o banco de dados do servidor e a memória do lado do cliente.
3. O Sistema de Design (Design System)
- Limite Principal: O contrato de API dos componentes de UI.
- Estado: Estado de UI local estritamente controlado; completamente agnóstico aos dados de domínio.
- Renderização: Deve suportar múltiplos ambientes (React, Vue, Web Components).
- Foco da Arquitetura: Consistência, acessibilidade e prevenção de mudanças drásticas (breaking changes) para as equipes consumidoras.
Heurística Final
O teste da sua arquitetura frontend não é se ela usa o framework mais recente. O teste é o que acontece quando os requisitos mudam.
Se alterar a estrutura de dados do seu backend exige reescrever seus componentes de UI, seus limites falharam. A arquitetura é a disciplina de proteger a UI do banco de dados e proteger o banco de dados da UI.
Guias e Termos Relacionados
Para uma exploração mais profunda, veja:
- Arquitetura da Informação e Arquitetura de Conteúdo — Como a estrutura de conhecimento direciona a UI.
- Desempenho Web como Arquitetura — Como decisões de renderização afetam o desempenho.
- Escolhendo a Pilha Certa — Como mapear a forma do produto para a tech stack.