C4 Model - Documentação Visual de Arquitetura de Solução
Diagrama de Arquitetura - Modelo C4 Entenda o modelo que simplifica a visualização da arquitetura de sistemas complexos.
📘 Introdução
O C4 Model é uma abordagem criada por Simon Brown para documentar e comunicar arquiteturas de software de forma clara, hierárquica e padronizada.
Ele se baseia na ideia de que a arquitetura deve ser compreensível por diferentes públicos, desde gestores e analistas até desenvolvedores.
O nome C4 vem dos quatro níveis de abstração que ele propõe:
C1 – Contexto, C2 – Containers, C3 – Componentes, C4 – Código
Essa estrutura hierárquica ajuda a representar o sistema de forma progressiva, indo do macro (visão de negócio) até o micro (nível técnico detalhado).
🎯 Objetivo do C4 Model
O objetivo do modelo é comunicar a arquitetura de software de forma eficaz, sem cair na armadilha de diagramas excessivamente técnicos ou genéricos.
Ele busca equilibrar:
- Clareza para não técnicos;
- Profundidade para engenheiros e arquitetos;
- Consistência visual e padronização na documentação.
🧩 Os 4 Níveis do C4 Model
C1 - Diagrama de Contexto
Mostra o sistema como um todo, destacando seus usuários e sistemas externos que interagem com ele.
Pergunta respondida:
“Quem usa o sistema e com o que ele se comunica?”
Exemplo de conteúdo:
- Sistema principal (ex: SPM – Sistema de Patrimônio Móvel);
- Usuários (ex: servidores, gestores, analistas);
- Sistemas externos (ex: SIGE, LDAP, Banco de Dados Corporativo).
Exemplo visual:
[Usuário] → [SPM] → [Sistema de Autenticação SEAD]
C2 - Diagrama de Containers
Apresenta os principais blocos de execução do sistema (aplicações, serviços, bancos, filas, etc.) e como se comunicam.
Pergunta respondida:
“Como o sistema é estruturado em nível de aplicações e tecnologias?”
Exemplo de conteúdo:
- Aplicação Web (Angular, Vue.js);
- API Backend (Spring Boot, PHP Laravel);
- Banco de Dados Oracle;
- Filas (Kafka, RabbitMQ);
- Serviços externos (WSO2, APIs REST).
Exemplo visual:
[Usuário]
↓ [Front-end Angular] ⇄ [API Spring Boot] ⇄ [Oracle Database]
C3 - Diagrama de Componentes
Mostra os módulos internos dentro de cada container, suas responsabilidades e interações.
Pergunta respondida:
“Como o sistema é dividido internamente?”
Exemplo de conteúdo:
- Controller, Service e Repository (no backend);
- Módulos (ex: Inventário, Bens Permanentes, Movimentação);
- Componentes de integração (Feign Clients, DTOs, Mappers).
Exemplo visual:
[API Spring Boot]
├── Controller: BemController
├── Service: BemService
├── Repository: BemRepository
└── Integration: SigeClient
C4 - Diagrama de Código (opcional)
Detalha a implementação técnica de um componente específico, útil apenas em contextos de auditoria, revisão técnica ou projetos críticos.
Pergunta respondida:
“Como este componente está implementado em nível de código?”
Pode incluir:
- Classes;
- Interfaces;
- Relações UML;
- Dependências diretas.
Exemplo visual (simplificado):
class BemService {
+cadastrarBem()
+atualizarBem()
-validarCamposObrigatorios()
}
🧠 Benefícios do C4 Model
✅ Clareza de comunicação entre áreas técnicas e de negócio
✅ Padronização de documentação arquitetural
✅ Facilidade de manutenção e atualização de diagramas
✅ Suporte a diversas ferramentas de modelagem (PlantUML, Structurizr, Excalidraw, etc.)
✅ Escalável, funciona bem para sistemas simples e complexos
⚙️ Ferramentas Recomendadas
Na SEAD, o C4 Model pode ser criado com diferentes ferramentas visuais, de acordo com o contexto e familiaridade da equipe:
| Ferramenta | Descrição | Uso Recomendado |
|---|---|---|
| Excalidraw | Plugin visual do Obsidian | Diagramas rápidos e colaborativos |
| PlantUML | Baseado em texto, gera diagramas C4 | Automação e versionamento com código |
| Structurizr DSL | Linguagem oficial de Simon Brown | Modelos formais e integração com CI/CD |
| Draw.io / Diagrams.net | Editor visual popular | Alternativa visual simples |
| Lucidchart / Whimsical | Ferramentas online | Diagramas de alto nível e apresentações |
🧱 Exemplo prático - Sistema de Patrimônio Móvel (SPM)
| Nível | Descrição |
|---|---|
| C1 - Contexto | O SPM interage com o SIGE e o LDAP para autenticação e controle de usuários. |
| C2 - Containers | O sistema é composto por uma API Spring Boot, um front-end Vue.js e um banco Oracle. |
| C3 - Componentes | Dentro da API há módulos de Inventário, Movimentação e Relatórios. |
| C4 - Código | O módulo de Inventário possui classes BemService, BemRepository e BemController. |
🧭 Boas Práticas para Uso na SEAD
- Mantenha um diagrama C4 por sistema dentro da pasta
/arquitetura/diagramas/. - Nomeie os arquivos como
c1-contexto.md,c2-containers.md,c3-componentes.md. - Use o Excalidraw ou PlantUML dentro do Obsidian para manter o versionamento junto do repositório.
- Atualize os diagramas sempre que houver mudanças significativas na arquitetura.
- Inclua um sumário explicativo em cada diagrama para auxiliar novos integrantes.
📚 Referências
- The C4 Model - Simon Brown (oficial)
- Structurizr DSL
- PlantUML C4 Extensions
- Documenting Software Architecture - ThoughtWorks Tech Radar