C4 · Código¶
Objetivo¶
Mostrar como o código é organizado dentro de um componente (um app Django) — nível 4 do C4 Model, o mais próximo do código real.
Estrutura real (não Clean Architecture — ver ADR-0002)¶
apps/<dominio>/
models.py # entidades e regras de validação simples
forms.py # validação e widgets server-side
views.py # views baseadas em classe/função
urls.py # rotas do app
services.py # regra de negócio reutilizável (transições, cálculos)
api/ # viewsets DRF — só nos módulos que têm API
templates/ # apresentação server-rendered
tests/
Não existem pastas domain/, application/, infrastructure/ ou presentation/ — a decisão real (ADR-0002) foi não formalizar essas camadas.
Onde cada regra vive¶
| Tipo de regra | Vive em |
|---|---|
| Validação de campo, constraint | models.py (clean(), Meta.constraints) |
| Validação de formulário | forms.py |
| Autorização de acesso à view | views.py (mixins de permissão) |
| Transição de estado com regra própria (conversão de lead, fechamento de oportunidade) | services.py |
| Serialização para API | api/serializers.py, quando o módulo tem API |
| Auditoria da ação | Chamada explícita a LogService.registrar_log(...) a partir da view/service |
Diagrama — fluxo de uma requisição¶
flowchart LR
Request["Requisição HTTP"] --> View["views.py"]
View --> Form["forms.py\n(validação)"]
View --> Service["services.py\n(regra de negócio)"]
Service --> Model["models.py\n(ORM)"]
Model --> DB[("PostgreSQL")]
View --> Log["LogService\n(auditoria)"]
View --> Template["templates/\n(resposta HTML)"]