Este projeto foi criado baseado no artigo "Uma arquitetura, em .Net Core, baseada nos princípios do DDD" escrito pelo Alex Alves.
Implementei todo o projeto utilizando as seguintes ferramentas:
Fiz algumas modificações no projeto original do Alex:
- Migração para a versão 3.1 do Dotnet;
- Utilização do SQLLite para simplificar os testes e diminuir as dependencias externas;
- Alterei a forma de utilização do DbContext, para utilizar o conceito de Injeção de Dependencia. Com esta alteração acredito ter conseguido os seguintes benefícios:
- Permitir a troca do banco de dados facilmente;
- Facilitar a realização de testes;
- Na classe de repositório começei a utilizar os acessos assincronos nos métodos de *pesquisa";
- https://tutexchange.com/how-to-use-fluentvalidation-in-asp-net-core/
Segue a lista dos comandos do dotnet CLI necessários para criação dos projetos envolvido e adição das referencias e packages necessários:
-
Criar os projetos (Você deve estar posicionado na pasta "ModeloApp")
dotnet new webapi -n Application
dotnet new classlib -n Domain
dotnet new classlib -o Infra/Data -n Infra.Data
dotnet new classlib -o Infra/CrossCutting -n Infra.CrossCutting
dotnet new classlib -n Service
-
Adicionar os projetos na Solução (Você deve estar posicionado na pasta "ModeloApp")
dotnet sln TesteModeloApp.sln add Application
dotnet sln TesteModeloApp.sln add Domain
dotnet sln TesteModeloApp.sln add Infra/Data
dotnet sln TesteModeloApp.sln add Infra/CrossCutting
dotnet sln TesteModeloApp.sln add Service
-
Adicionar as dependencias entre a nossa Aplicação e as nossas bibliotecas
dotnet add Application reference Domain
dotnet add Application reference Service
dotnet add Infra/Data reference Domain
dotnet add Service reference Domain
dotnet add Service reference Infra/Data
-
Adicionar os pacotes via nuget
dotnet add Application package Microsoft.EntityFrameworkCore.Design --version 3.1.5
dotnet add Application package Microsoft.EntityFrameworkCore.Sqlite --version 3.1.5
dotnet add Application package FluentValidation.AspNetCore --version 8.6.2
dotnet add Domain package FluentValidation.AspNetCore --version 8.6.2
dotnet add Infra/Data package Microsoft.EntityFrameworkCore.Design --version 3.1.5
dotnet add Infra/Data package Microsoft.EntityFrameworkCore.Relational --version 3.1.5
dotnet add Service package FluentValidation.AspNetCore --version 8.6.2
Abaixo está a estrutura final das pastas:
- ModeloApp
- Application
- Controllers
- Data
- Context
- Domain
- Entities
- Interfaces
- Infra
- CrossCutting
- Data
- Context
- Mapping
- Repository
- Service
- Services
- Validators
dotnet ef migrations add CriacaoDaBase -o "./Data/Migrations"
dotnet ef update