-
Notifications
You must be signed in to change notification settings - Fork 0
Architecture
DDD não e uma arquitetura. O DDD (Domain Driven Design) é uma modelagem de software cujo objetivo é facilitar a implementação de regras e processos complexos, onde visa a divisão de responsabilidades por camadas e é independente da tecnologia utilizada. Ou seja, o DDD é uma filosofia voltado para o domínio do negócio.
Ciente do que foi citado acima, é sugerido criar uma arquitetura especifica para a construção da API.
- Api: Porta de entrada, responsável por receber as requisições e direcioná-las para camadas mais internas
- Domain: Um dos responsáveis pelo Core do projeto, contendo classes, enums e interfaces que poderão ser utilizadas para compor as regras de negócio
- Service: Um dos responsáveis pelo Core do projeto, onde é utilizado o que há na camada Domínio para realizar, de fato, as regras de negócio
-
Infra: Camada para comunicação externa
- Infra.Data: Responsável pela comunicação com banco de dados, realizando operações
- Infra.CrossCutting: Responsável por registrar as dependências do projeto (IoC / DI), além de poder conter códigos reutilizáveis e comums para todo o projeto
Todas as soluções conhecem o domínio, mas o domínio não conhece nenhuma solução. Podemos referenciar um projeto seguindo o padrão de comando a seguir:
cd AvoanteDigital.Domain/Tests/
dotnet add reference ../AvoanteDigital.Domain/
Lembrando que, apesar de não estarem incluídos na imagem, os tests/ fazem parte do projeto. Eles conhecem apenas o domínio.
Primeiro criamos uma solução vazia.
dotnet new sln
Depois criamos a estrutura de diretórios seguindo o seguinte padrão:
dotnet new classlib -o Projeto.Domain
dotnet new webapi -o Projeto.Api
dotnet new classlib -o Projeto.Service
dotnet new classlib -o Projeto.Infra
dotnet new mstest -o Projeto.Domain.Tests
Na camada de aplicação (Projeto.Api/), geramos um projeto do tipo ASP.Net Core Web Application.
Nas camadas de domínio (Projeto.Domain/), serviço (Projeto.Service/) e infraestrutura (Projeto.Infra/), geramos projetos do tipo Class Library (.Net Core).
E, por último, os testes (Projeto.Domain.Tests/) do tipo mstest.
Depois referenciamos os projetos:
dotnet sln add ./Projeto.Domain/
dotnet sln add ./Projeto.Api/
etc.
A estrutura final da solução ficará parecida com isto:
Para adicionar e executar uma nova migração:
dotnet ef migrations add Migration0001 --project ./AvoanteDigital.Infra/
dotnet ef database update --project ./AvoanteDigital.Infra/
Para executar o projeto:
dotnet run --project ./AvoanteDigital.Api/
Começando com .NET Core, com Arquitetura em Camadas
Uma arquitetura, em .Net Core, baseada nos princípios do DDD