Contexto
A decisão 2 permite que a API use a Infrastructure só para registrar os serviços, no Program.cs. Hoje o código cumpre isso, mas nenhum teste garante: um endpoint poderia receber o AppDbContext e consultar o banco sem passar por um handler. As issues #9, #10 e #11 criam a maior parte dos endpoints de M1, então a regra entra antes delas (decisão 28, "Planejada").
Escopo
- Um teste novo em
tests/ControlService.ArchitectureTests/LayerDependencyTests.cs: nenhum tipo do projeto API, exceto Program, depende de ControlService.Infrastructure.
- Arquivo novo
src/ControlService.API/AssemblyReference.cs, igual ao das outras três camadas, para o teste localizar o projeto.
- Prova do Red por violação temporária, desfeita antes do commit (ver "Testes").
- Atualização de
docs/decisoes-de-arquitetura.md: decisão 28 (quinta linha da tabela, custo "cinco testes", remoção do trecho "Planejada") e decisão 26 (contagem de ArchitectureTests de 4 para 5).
Fora do escopo
Dependências
Riscos
- O NetArchTest pode não enxergar a dependência dentro de uma lambda de endpoint — percebe-se se o teste continuar verde com a violação temporária. Nesse caso, parar e avisar o dono, sem trocar de pacote nem de abordagem.
- O filtro pode excluir tipos demais e o teste passar sem examinar nada — a mesma violação temporária revela.
- A violação temporária pode ir para o commit por engano — conferir com
git status e git diff antes do commit: só os arquivos do escopo podem aparecer.
Decisões do levantamento
- Red provado por violação temporária, sem teste permanente do próprio teste — não deixa código para manter e usa o formato real do atalho.
Program excluído pelo nome, não pelo namespace — uma classe sem namespace não escapa da regra.
AssemblyReference.cs na API — segue o padrão das outras camadas.
Testes
| ID |
Teste |
Camada |
Regra |
Resultado esperado |
| T01 |
Deve reprovar qualquer tipo da API, fora do Program, que dependa de ControlService.Infrastructure |
Arquitetura |
Decisões 2 e 28 |
Verde no código atual. Com a violação temporária (parâmetro AppDbContext numa lambda de AuthEndpoints.cs), vermelho com a mensagem Forbidden dependencies found in: seguida de ControlService.API.Auth.AuthEndpoints |
Evidência do Red: a saída do teste falhando com a violação temporária entra no pull request e no relatório final.
Sem teste próprio: AssemblyReference.cs da API — coberto por T01.
Critérios de aceite
Recomendações futuras
- Proibir também
Microsoft.EntityFrameworkCore na API fora do Program.cs. Hoje não é necessário: sem um tipo da Infrastructure, um endpoint não alcança o banco.
Contexto
A decisão 2 permite que a
APIuse aInfrastructuresó para registrar os serviços, noProgram.cs. Hoje o código cumpre isso, mas nenhum teste garante: um endpoint poderia receber oAppDbContexte consultar o banco sem passar por um handler. As issues #9, #10 e #11 criam a maior parte dos endpoints de M1, então a regra entra antes delas (decisão 28, "Planejada").Escopo
tests/ControlService.ArchitectureTests/LayerDependencyTests.cs: nenhum tipo do projetoAPI, excetoProgram, depende deControlService.Infrastructure.src/ControlService.API/AssemblyReference.cs, igual ao das outras três camadas, para o teste localizar o projeto.docs/decisoes-de-arquitetura.md: decisão 28 (quinta linha da tabela, custo "cinco testes", remoção do trecho "Planejada") e decisão 26 (contagem deArchitectureTestsde 4 para 5).Fora do escopo
APIde usarMicrosoft.EntityFrameworkCorefora doProgram.cs— recomendação futura./levantar-issue 9.Dependências
docs/decisoes-de-arquitetura.md.NetArchTest.Rules1.3.2, já instalado.Riscos
git statusegit diffantes do commit: só os arquivos do escopo podem aparecer.Decisões do levantamento
Programexcluído pelo nome, não pelo namespace — uma classe sem namespace não escapa da regra.AssemblyReference.csnaAPI— segue o padrão das outras camadas.Testes
Program, que dependa deControlService.InfrastructureAppDbContextnuma lambda deAuthEndpoints.cs), vermelho com a mensagemForbidden dependencies found in:seguida deControlService.API.Auth.AuthEndpointsEvidência do Red: a saída do teste falhando com a violação temporária entra no pull request e no relatório final.
Sem teste próprio:
AssemblyReference.csdaAPI— coberto por T01.Critérios de aceite
check.ps1termina sem avisos, com todos os testes do projeto verdes.docs/atualizado no mesmo pull request:docs/decisoes-de-arquitetura.md(decisões 26 e 28).Recomendações futuras
Microsoft.EntityFrameworkCorenaAPIfora doProgram.cs. Hoje não é necessário: sem um tipo daInfrastructure, um endpoint não alcança o banco.