Este é um projeto de implementação de uma API .NET Core que aplica conceitos de Domain-Driven Design (DDD) e práticas de testes.
- O projeto ainda está em fase de implementação. Serão acrescentados testes e outras ideias que estão faltando.
- PRs são sempre bem-vindos, principalmente para finalizar a implementação dos testes que estão faltando 😉
- Separação do projeto em DLLs diferentes: para que cada camada faça referências apenas para as bibliotecas necessárias.
- Com exceção da camada de aplicação e testes, as demais camadas foram criadas como Class Library (.NET Standard) para garantir maior compatibilidade na referência entre projetos.
- Nota: importante clicar com o botão direito no projeto criado e acessar a opção Properties para alterar o Target framework para o mais atualizado, visto que o Visual Studio pode criar o projeto com uma versão antiga.
- Camadas:
- Domain: contém o domínio da aplicação, contém as entidades e interfaces necessárias para atender ao negócio.
- Infraestructure: código não relacionado com o domínio que resolve problema comuns como I/O, rede, acesso ao banco e assim por diante.
- Services: representa os serviços do domínio (domain services), contém as regras de negócio.
- Api: engloba tanto a camada de aplicação quanto a camada de serviços de aplicação (application services).
- O uso de repositories nos controllers da aplicação é totalmente aceitável e reduz complexidade, pois menos testes e camadas serão necessárias.
- Assume-se a biblioteca FluentValidation como parte integrante do domínio, dada suas características de facilitar as validações.
Algumas das práticas adotadas estão listadas logo abaixo, para mais profundidade no assunto é recomendada a leitura das referências usadas no desenvolvimento deste projeto (podem ser encontradas nas seções abaixo).
- Dividir os testes em seções, sendo elas:
- Arrange: Organizar seus objetos, criando e configurando-os conforme necessário.
- Act: agir em um objeto.
- Assert: garantir que algo está como o esperado.
- Tenha cuidado ao usar variáveis que podem ter seu estado alterado na etapa de ACT para fazer o ASSERT. Os objetos no C# utilizam referência de memória e podem ter o seu estado alterado, gerando falsos positivos no momento do ASSERT. Este é apenas um dos problemas que podem ser causados pelo reaproveitamento de objetos do ACT no ASSERT.
- Documentação da API: Swagger
- Nuget: Swashbuckle.AspNetCore
- Para o correto funcionamento, demanda habilitar a opção XML documentation file. Para isso, siga os passos: (1) Botão direito no nome do projeto; (2) opção Properties; (3) guia Build; (4) habilitar a opção XML documentation file; (5) Adicionar o valor 1591 no campo Supress warnings separado por ponto e vírgula.
- Referência: XML Comments Swagger .Net Core
- Fakeiteasy
- AutoBogus
- FluentAssertions
- FluentAssertions.Web
Esta seção contém referências usadas no desenvolvimento do projeto.