Explicamos o que é o Atomic Design — uma metodologia de design de interfaces proposta por Brad Frost em 2013, que empresta a metáfora de átomos, moléculas e organismos para construir uma hierarquia de componentes de UI. Diferente da abordagem baseada em páginas, onde a interface é projetada tela por tela, o Atomic Design divide a UI nos menores elementos reutilizáveis (átomos) e os monta em estruturas mais complexas. Segundo Brad Frost (2016), a metodologia é usada nos sistemas de design de 67% das grandes empresas, incluindo IBM, Airbnb e Google.
Pontos principais
Atomic Design é uma metodologia para criar sistemas hierárquicos de interfaces, onde cada elemento de UI pertence a um dos cinco níveis: átomos (elementos básicos), moléculas (combinações de átomos), organismos (blocos complexos), templates (wireframes de página) e páginas (telas específicas com dados). A analogia é emprestada da química: átomos se combinam em moléculas, moléculas em organismos, organismos em templates, templates são preenchidos com conteúdo e se tornam páginas.
A metodologia foi proposta pelo designer web Brad Frost em 2013 como resposta ao problema do "pensamento de página" — quando cada nova tela é projetada do zero sem considerar os componentes existentes. No livro "Atomic Design" (2016), Frost descreve a implementação da metodologia em projetos de grandes empresas: IBM, GE, Starbucks. Segundo Nielsen Norman Group (2022), o Atomic Design reduz o tempo de design de novas telas em 30–50% através do reuso de componentes prontos.
Atomic Design não é tanto uma tecnologia quanto uma filosofia de organização da UI. Não está vinculado a um framework específico e é aplicável tanto na web (React, Vue) quanto no desenvolvimento mobile (Jetpack Compose, SwiftUI). Na IT Sectr, usamos Atomic Design para construir sistemas de design para clientes: identificamos componentes atômicos na fase de design e os transferimos para componentes de código em Compose/SwiftUI.
Cada nível do Atomic Design resolve seu próprio problema e tem uma área de responsabilidade estrita. Átomos são os menores blocos de construção da interface que não podem ser divididos sem perder significado: botão, campo de texto, ícone, label, checkbox. Átomos não contêm lógica de negócio e não dependem de contexto. Eles definem características visuais básicas: cor, tamanho, espaçamento, tipografia.
Moléculas são combinações de dois ou mais átomos que formam unidades funcionais simples. Um campo de entrada com label e mensagem de erro é uma molécula. Um card de produto com imagem, nome e preço é uma molécula. Moléculas podem conter lógica básica (mostrar/esconder erro), mas não contêm processos de negócio. Moléculas são o primeiro nível em que os componentes se tornam reutilizáveis em diferentes telas.
Organismos são blocos de interface complexos compostos por moléculas e átomos que implementam uma função específica da aplicação. Um formulário de login (campo de email, campo de senha, botão de envio, link "esqueci a senha") é um organismo. Um cabeçalho com logotipo, busca e navegação é um organismo. Organismos podem conter lógica de negócio e acessar a API, mas apenas dentro de sua função.
Templates são wireframes de página que definem o arranjo dos organismos na tela sem conteúdo específico. Um template define a grade, colunas, áreas de conteúdo — um wireframe no nível de código. Templates não contêm dados, apenas placeholders. Eles permitem avaliar a estrutura da página antes de preenchê-la com conteúdo.
Páginas são telas específicas da aplicação onde o template é preenchido com dados reais. Neste nível, verifica-se como os componentes se parecem com conteúdo real (strings longas, dados ausentes, erros). Páginas são o único nível que o usuário final vê. Mudanças no nível de página não devem afetar átomos, moléculas e organismos — se um componente precisa ser alterado, a mudança é feita em seu nível, e a página o absorve automaticamente.
Vantagens do Atomic Design se tornam evidentes ao escalar interfaces. Uma biblioteca única de componentes garante consistência visual: um botão parece o mesmo em todas as telas porque é o mesmo átomo. Segundo Brad Frost (2016), empresas que implementaram Atomic Design reduzem o tempo de desenvolvimento de novas telas em 30–50% através do reuso de moléculas e organismos prontos.
| Característica | Atomic Design | Abordagem baseada em páginas |
|---|---|---|
| Reuso de componentes | Alto (átomos, moléculas, organismos) | Baixo (cada tela do zero) |
| Consistência visual | Garantida | Controle manual |
| Velocidade de criação de novas telas | Alta (montagem a partir de blocos prontos) | Baixa (design + marcação do zero) |
| Complexidade de implementação | Alta (requer catálogo de componentes) | Baixa (modelo familiar) |
| Testabilidade | Alta (cada átomo é isolado) | Integração (tela inteira de uma vez) |
Limitações — Atomic Design não descreve como gerenciar o estado da aplicação. A metodologia apenas responde à pergunta "como organizar os componentes de UI" mas não aborda lógica de negócio, roteamento ou gerenciamento de dados. A segunda limitação é a dificuldade de definir limites: onde termina uma molécula e começa um organismo? Na prática, os limites são difusos, e diferentes equipes podem classificar o mesmo componente de forma diferente. Recomenda-se estabelecer regras em tokens de design e em um catálogo de componentes (Storybook, Jetpack Compose Preview).
A terceira limitação é a abstração excessiva para projetos pequenos. Se uma aplicação consiste em 5 telas, criar uma hierarquia de átomos e moléculas é trabalho desnecessário. Atomic Design se torna benéfico quando o número de telas excede 20 e os componentes são reutilizados em diferentes páginas.
Atomic Design e Feature-Sliced Design (FSD) resolvem problemas diferentes e podem ser usados juntos. Atomic Design é uma metodologia para organizar componentes de UI, FSD é uma metodologia para organizar camadas de negócio e a aplicação como um todo. Atomic Design responde à pergunta "como dividir a UI em partes reutilizáveis", FSD responde a "como organizar o código em torno de funcionalidades de negócio". Eles não competem: você pode ter uma estrutura FSD com camadas features e entities, e dentro de cada camada usar Atomic Design para organizar os componentes de UI.
| Critério | Atomic Design | Feature-Sliced Design |
|---|---|---|
| Escopo | Componentes de UI | Arquitetura da aplicação |
| Unidade de agrupamento | Metáfora química (átomo → molécula → organismo) | Funcionalidade de negócio (slice) |
| Dependências | De átomos para páginas (baixo para cima) | De app para shared (cima para baixo) |
| Manipulação de dados | Não descrita | Através de segmentos model + api |
| Escalabilidade | Horizontal (mais componentes) | Vertical (mais funcionalidades) |
Combinação típica: FSD define a estrutura modular da aplicação (camadas, slices), Atomic Design define a estrutura interna dos componentes de UI dentro de cada slice. Por exemplo, o slice feature.auth contém moléculas (LoginForm, PasswordInput) e organismos (AuthPage) montados de acordo com as regras do Atomic Design. A camada shared contém átomos (Button, Input, Label) reutilizados em todas as funcionalidades.
Jetpack Compose e SwiftUI suportam naturalmente a hierarquia do Atomic Design através da composição de componentes. Átomos no Compose são funções @Composable básicas: AppButton, AppTextField, AppCheckbox. Cada função aceita parâmetros de customização (cor, tamanho, estado) e não contém lógica de negócio. Átomos são definidos na camada shared e exportados como um UI-kit.
Moléculas são funções @Composable que combinam vários átomos: LabeledTextField (label + campo de entrada + mensagem de erro), ProductCard (imagem + nome + preço). Moléculas podem conter estado básico (validade do campo) mas não acessam API ou ViewModel. Elas são reutilizadas em diferentes organismos.
Organismos são funções @Composable no nível de funcionalidade: LoginForm (LabeledTextField para email + LabeledTextField para senha + AppButton de envio + link de recuperação). Organismos trabalham com ViewModel através de funções Intent e podem conter lógica de negócio. No SwiftUI, uma hierarquia similar é construída através de @ViewBuilder e estruturas View personalizadas.
No SwiftUI, um átomo é uma estrutura View personalizada AppButton, uma molécula é um campo de entrada com label em HStack, um organismo é um formulário de login. Essa estrutura permite reutilizar componentes em todas as telas — alterar um átomo (cor do botão) aplica-se automaticamente a todas as telas. A combinação do Atomic Design com um sistema de design garante consistência da interface sem controle manual de cada tela.
Perguntas Frequentes
Os cinco níveis são uma recomendação, não uma lei. Muitos sistemas de design (Material Design, IBM Carbon) usam 3 ou 4 níveis: componentes básicos, componentes compostos e templates. A regra principal é que cada componente pertença a um nível e possa ser reutilizado em níveis superiores. Se você perceber que os níveis "molécula" e "organismo" no seu projeto não se distinguem — funda-os. Átomos e páginas são os únicos níveis obrigatórios.
Átomos são testados visualmente (testes de Snapshot, Compose Preview) — verifica-se que um botão com props determinadas renderiza corretamente. Moléculas são testadas como combinação de átomos — verifica-se o estado (erro, sucesso, desabilitado). Organismos requerem testes de integração — verifica-se a interação com a ViewModel (envio de formulário, carregamento de dados). Na IT Sectr, usamos Compose Test para Android e XCTest para iOS; para testes visuais — Paparazzi (Android) e SnapshotTesting (iOS).
Pode, mas a eficiência diminui. Sem um sistema de design e tokens de design, os átomos não têm um estilo unificado — cada desenvolvedor cria seus próprios átomos com cores e espaçamentos arbitrários, levando à inconsistência visual. Atomic Design e sistema de design são conceitos complementares: Atomic Design define a hierarquia, o sistema de design define a linguagem visual. Recomenda-se implementá-los juntos: primeiro os tokens de design (cores, tipografia, espaçamentos), depois os átomos, depois as moléculas e os organismos.
A "zona atômica" é uma situação onde o número de átomos excede limites razoáveis (100+) e encontrar o componente necessário leva mais tempo do que escrevê-lo do zero. A solução é a colocação de átomos por funcionalidades: um átomo usado por apenas uma funcionalidade deve ser armazenado dentro dessa funcionalidade, não no shared. No shared são colocados apenas os átomos globais (Button, Text, Input). Segundo Brad Frost, a colocação reduz o número de átomos compartilhados em 60–70% sem perder reutilização.
Atomic Design foi originalmente uma metodologia de design de interfaces, mas na prática moderna também é usado para organizar código. Em ferramentas de design (Figma, Sketch), átomos são componentes de biblioteca; no código, são funções e classes. A metodologia não distingue entre design e código — o átomo é o mesmo tanto no mockup quanto na implementação. Na IT Sectr, usamos supernova.io para sincronizar átomos de design e átomos de código, eliminando discrepâncias entre o mockup e a interface final.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também