Pular para conteúdo

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)"]

Referências