Skip to content

Architecture

Romulo de Oliveira edited this page Nov 26, 2024 · 1 revision

C# com DDD

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.

Entendendo a arquitetura utilizada

  1. Api: Porta de entrada, responsável por receber as requisições e direcioná-las para camadas mais internas
  2. 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
  3. 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
  4. 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

Referencias

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.

Criando o projeto

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:

Comandos Úteis

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/

Bibliografia

Conventional Commits Pattern

Começando com .NET Core, com Arquitetura em Camadas

Uma arquitetura, em .Net Core, baseada nos princípios do DDD

Clone this wiki locally