Matriz tecnológica
Uma propriedade por linha, mantida por uma tecnologia diferente em cada coluna.
Não normativo
- Versão do Companion
- 1.0
- Corresponde ao COADF Core
- 2.2
- Status
- Atual
- Última revisão
Cada linha é uma propriedade de arquitetura; cada coluna mostra como uma stack pode mantê-la. A matriz mostra que a propriedade continua a mesma enquanto a tecnologia muda.
A matriz não classifica as stacks e não recomenda nenhuma coluna.
Validação na fronteira
Princípios: P-1
- Java e Spring
- Jakarta Validation nos tipos de requisição com
@Valid, e de novo na fábrica do domínio - Python e FastAPI
- Modelos Pydantic com
extra="forbid"e modo estrito; o FastAPI responde a entradas inválidas com 422 - TypeScript e Node
- Um esquema Zod ou JSON Schema em cada lado que recebe, com o tipo inferido a partir dele
- Cloud-native e Kubernetes
- Não é uma propriedade da infraestrutura: a admissão nunca vê dados da aplicação
Validação de esquema em tempo de execução
- Java e Spring
- Restrições de Bean, e uma política explícita sobre propriedades não declaradas nos tipos de fronteira
- Python e FastAPI
model_validate_jsonsobre a resposta bruta; um modelo de resposta explícito- TypeScript e Node
safeParsecom objetos estritos; Ajv por trás dos esquemas de rota do Fastify- Cloud-native e Kubernetes
- Validação estrita de esquema dos manifestos antes de serem aplicados
Propagação do rastro
Princípios: P-4
- Java e Spring
- Micrometer Tracing com a ponte para OpenTelemetry; decoradores de tarefa que propagam o contexto
- Python e FastAPI
injecteextractdo OpenTelemetry; o contexto copiado para as threads- TypeScript e Node
- OpenTelemetry JS com o gerenciador de contexto AsyncLocalStorage
- Cloud-native e Kubernetes
- Configurações do SDK do OpenTelemetry por carga de trabalho; W3C Trace Context por padrão
Trilha de auditoria persistente
Princípios: P-4
- Java e Spring
- Entradas gravadas na transação de negócio; permissões e triggers do banco de dados
- Python e FastAPI
- PostgreSQL com um papel que só pode inserir, triggers de recusa e escritas idempotentes
- TypeScript e Node
- O mesmo esquema PostgreSQL por meio de um driver, na transação de negócio
- Cloud-native e Kubernetes
- O armazenamento da própria aplicação, nunca a pipeline de telemetria
Avaliação de regras
Princípios: P-8
- Java e Spring
- Uma interface que pertence ao domínio, com um adaptador para OPA, ou tabelas de regras
- Python e FastAPI
- OPA pela sua API REST, atrás de uma interface; nenhuma decisão sem versão
- TypeScript e Node
- OPA por HTTP, ou Rego compilado para WebAssembly e avaliado no próprio processo
- Cloud-native e Kubernetes
- OPA como serviço ou sidecar, com as versões do bundle nos logs de decisão
Testes de arquitetura
- Java e Spring
- Regras do ArchUnit, ou a verificação do Spring Modulith
- Python e FastAPI
- Contratos do import-linter
- TypeScript e Node
- dependency-cruiser, regras de fronteira do ESLint, ou project references
- Cloud-native e Kubernetes
- Testes para os manifestos e para as próprias regras de admissão
Aplicação na CI
Princípios: P-6
- Java e Spring
- Testes de arquitetura e de contrato como verificações obrigatórias
- Python e FastAPI
- Contratos de importação, testes negativos e o fence de publicação como verificações obrigatórias
- TypeScript e Node
- Regras de dependência, testes de esquema e testes de contrato como verificações obrigatórias
- Cloud-native e Kubernetes
- Um job de resumo que falha quando algum fence falhou ou foi pulado
Isolamento de normas
Princípios: P-7
- Java e Spring
- Interfaces de porta no módulo de domínio; um módulo adaptador por fornecedor
- Python e FastAPI
- Uma porta
typing.Protocole um adaptador que é o único a conhecer o fornecedor - TypeScript e Node
- Interfaces de porta; um pacote adaptador por fornecedor no workspace
- Cloud-native e Kubernetes
- Egress liberado explicitamente para cada serviço externo, e para nada mais
Observabilidade
Princípios: P-4
- Java e Spring
- Micrometer Observation
- Python e FastAPI
- A API e o SDK do OpenTelemetry
- TypeScript e Node
- O SDK JS do OpenTelemetry, pré-carregado, com o hook de loader para módulos ES
- Cloud-native e Kubernetes
- Uma pipeline do OpenTelemetry Collector, que pode fazer amostragem
Aplicação no deploy
Princípios: P-6
- Java e Spring
- Delegada à plataforma em que o serviço roda
- Python e FastAPI
- Delegada à plataforma em que o serviço roda
- TypeScript e Node
- Delegada à plataforma em que o serviço roda
- Cloud-native e Kubernetes
- ValidatingAdmissionPolicy ou Gatekeeper; imagens por digest; versões em todo objeto
