SPELL / Documentação
← Site principal

Bloco Arquitetura

O que o bloco Arquitetura define

O bloco Arquitetura é um bloco de Padrões de Engenharia (padroes.spell) e define as decisões arquiteturais que se aplicam a todo o projeto: padrão de organização do código, estratégia de erros, logging e outras diretrizes transversais.

Sem o bloco Arquitetura, a IA escolhe a arquitetura por conta própria baseada no stack declarado em Tecnologia. Com o bloco declarado, o arquiteto técnico estabelece as restrições que a IA deve seguir.

padroes.spell — Arquitetura
Arquitetura {
  padrao: Clean Architecture
  organizacao-de-pastas: por feature
  tratamento-de-erros: exceções tipadas + middleware global
  logging: structured logging com correlationId
  - Todas as respostas de erro seguem o formato {code, message, details}
  - Controllers são finos — lógica vai nos Use Cases
  - Repositórios não retornam IQueryable — só entidades materializadas
}

Campos estruturados

CampoDescriçãoExemplos de valor
padraoPadrão arquitetural principalClean Architecture, Hexagonal, MVC, Layered
organizacao-de-pastasComo o código é organizado em pastaspor feature, por camada, por tipo
tratamento-de-errosEstratégia de tratamento de exceçõesexceções tipadas + middleware global
loggingEstratégia de loggingstructured logging, console simples

Instruções livres de arquitetura

A maioria das decisões arquiteturais não cabe em campos estruturados. Use instruções livres para qualquer diretriz que a IA deve seguir:

Arquitetura {
  padrao: Hexagonal (Ports and Adapters)
  organizacao-de-pastas: por domínio
  tratamento-de-erros: Result pattern — sem exceções não tratadas
  logging: OpenTelemetry + Jaeger
  /// Arquitetura hexagonal foi escolhida para facilitar troca de banco de dados
  /// sem impacto no domínio. Adapters de banco ficam na camada Infrastructure.
  - Domain Layer não conhece infraestrutura — zero dependências externas
  - Application Layer orquestra use cases — sem lógica de negócio própria
  - Infrastructure Layer implementa os ports: banco, e-mail, storage
  - Nenhuma entidade de domínio depende de atributos de ORM
  - Testes unitários de domínio não precisam de banco de dados
}

Padrões de resposta e contratos de API

O bloco Arquitetura é o lugar certo para declarar o formato de respostas da API e outros contratos transversais:

Arquitetura {
  padrao: Vertical Slice Architecture
  - Todas as respostas de erro seguem {code: string, message: string, details: object}
  - Respostas paginadas seguem {items: [], total: int, skip: int, take: int}
  - Endpoints de criação retornam o objeto completo com ID gerado
  - Endpoints de atualização retornam o objeto completo atualizado
  - Endpoints de exclusão retornam 204 sem corpo
  - Datas sempre em ISO 8601 com timezone UTC
}

Notas do arquiteto para decisões importantes

Use notas /// para registrar o motivo de decisões arquiteturais relevantes. Isso preserva o contexto para futuros desenvolvedores — e para a própria IA, caso precise revisitar a arquitetura:

Arquitetura {
  padrao: Clean Architecture
  /// Clean Architecture foi escolhida por decisão da diretoria de engenharia
  /// em 2024. Não simplificar sem aprovação do arquiteto principal.
  /// Referência: ADR-001 no Confluence.
  organizacao-de-pastas: por feature
  /// Organização por feature facilita onboarding de novos devs
  /// e reduz conflitos de merge em features paralelas.
}