Solutions e múltiplos projetos
ResumoUma solution (
.sln) agrupa vários projetos relacionados. Projetos referenciam uns aos outros comProjectReference, permitindo separar camadas (Domínio, Aplicação, API) em bibliotecas distintas.
1. Objetivos de Aprendizagem#
- Criar uma solution e adicionar projetos a ela.
- Referenciar um projeto a partir de outro.
- Entender a relação com a arquitetura em camadas.
2. Pré-requisitos#
- Saber criar projetos com a CLI (tópico 1.3).
3. Conceito#
Uma aplicação real raramente é um único projeto. Você separa responsabilidades em bibliotecas:
Catalog.Domain— entidades e regras de negócio.Catalog.Application— casos de uso.Catalog.Api— a camada web (executável).
A solution (.sln) é apenas um agrupador para a IDE/CLI. O que cria dependência real entre projetos é o ProjectReference. O porquê de separar: isolar responsabilidades, permitir testes independentes e controlar a direção das dependências (a API depende do Domínio, nunca o contrário).
4. Mão na Massa#
4.1. Setup#
mkdir Catalog && cd Catalog
dotnet new sln -n Catalog
4.2. Implementação Passo a Passo#
- Crie os projetos:
dotnet new classlib -n Catalog.Domain
dotnet new classlib -n Catalog.Application
dotnet new webapi --use-controllers -n Catalog.Api
- Adicione-os à solution:
dotnet sln add Catalog.Domain Catalog.Application Catalog.Api
- Crie as referências (respeitando a direção):
dotnet add Catalog.Application reference Catalog.Domain
dotnet add Catalog.Api reference Catalog.Application
4.3. Executando#
dotnet build # compila toda a solution
dotnet run --project Catalog.Api
5. Exemplo Completo#
Três projetos numa solution, com dependências Api → Application → Domain, formam o esqueleto de uma aplicação em camadas — a mesma base usada no curso de Web API.
6. Boas Práticas e Armadilhas#
| Faça | Evite |
|---|---|
| Manter as dependências apontando para dentro (rumo ao Domínio) | Fazer o Domínio referenciar a API (dependência circular) |
| Um projeto por responsabilidade | Colocar tudo num único projeto gigante |
Atenção
dotnet runprecisa de--projectquando a solution tem mais de um projeto executável, senão a CLI não sabe qual iniciar.
7. Segurança e Produção#
- Separar camadas facilita revisar o que é exposto na fronteira web (a API) sem misturar regras de negócio.
8. Exercícios#
- Fácil: crie uma solution com dois projetos.
- Médio: referencie um do outro e use um tipo compartilhado.
- Desafio: tente criar uma dependência circular e observe o erro do compilador.
9. Resumo#
A solution agrupa projetos; ProjectReference define dependências reais. Separar em camadas (Domain, Application, Api) organiza responsabilidades e mantém as dependências apontando para dentro.
10. Próximos Passos#
A seguir, aprofundar em pacotes NuGet.
11. Referências#
- Microsoft Learn — dotnet sln
- Microsoft Learn — dotnet add reference
- Microsoft Learn — Arquitetura em camadas