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:

FerramentaDescriçãoUso Recomendado
ExcalidrawPlugin visual do ObsidianDiagramas rápidos e colaborativos
PlantUMLBaseado em texto, gera diagramas C4Automação e versionamento com código
Structurizr DSLLinguagem oficial de Simon BrownModelos formais e integração com CI/CD
Draw.io / Diagrams.netEditor visual popularAlternativa visual simples
Lucidchart / WhimsicalFerramentas onlineDiagramas de alto nível e apresentações

🧱 Exemplo prático - Sistema de Patrimônio Móvel (SPM)

NívelDescrição
C1 - ContextoO SPM interage com o SIGE e o LDAP para autenticação e controle de usuários.
C2 - ContainersO sistema é composto por uma API Spring Boot, um front-end Vue.js e um banco Oracle.
C3 - ComponentesDentro da API há módulos de Inventário, Movimentação e Relatórios.
C4 - CódigoO 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