Projeto realizado no módulo Formação ASP NET Core, utilizando .NET 5.
O objetivo deste projeto é, aperfeiçoar o framework, construindo uma API REST, utilizamos vários recursos como:
- Swagger
- Arquitetura Limpa
- Camadas -> Core, Infrastructure, Application, API
- Entity Framework Core
- Dapper
- CQRS
- MediatR
- JWT -> Json Web Token
- xUnit -> Para testes unitários
Mas quais funcionalidades foram implementadas?
- Cadastro, Atualização, Cancelamento e Consulta de Serviço de Freelancers.
- Cadastro de Usuário e de perfis Freelancer e Cliente
- Adicionar comentários para um serviço de Freelancer
- Definir, iniciar e finalizar o projeto
Ferramenta que simplifica o desenvolvimento de APIs, permitindo entre outras funcionalidades, a documentar e testar APIs. Ele consegue gerar uma interface gráfica contendo todos os pontos de acesso (Endpoints) da API, permitindo realizar requisições diretamente em sua interface.
Também conhecida como Onion Architecture, ou Arquitetura Cebola. Tem como foco o domínio do sistema, tendo em sua essência o DDD - Domain Driven Design, sendo dividida em 4 camadas principais:
É a ORM mais utilizada para desenvolvimento em .NET, sendo multiplataforma, open-source e mantida pela Microsoft. É madura, tendo sido evoluída junto ao .NET Core, com performance e funcionalidades sendo melhoradas a cada versão. Os pacotes a serem utilizados são:
Microsoft.EntityFrameworkCore.SqlServer
Microsoft.EntityFrameworkCore.Tools
using Microsoft.EntityFrameworkCore;
ORM mais performática e simples que o Entity Framework Core, de fácil adoção em um projeto que já utiliza o EF Core ou outros métodos de acessos de dados.
- Apresenta métodos de extensão ao IDbConnection (no caso de Sql.Server, SqlConnection)
using Dapper;
Command-Query Responsability Segregation
Padrão de desenvolvimento que separa as consultas (Queries) das ações que alteram o estado do sistema (Commands).
Melhora a legibilidade da aplicação, além de permitir maior separação de responsabilidades e estimula separação de modelos.
Uma espécie de mensageria interna em memória Tem suporte a Commands e Queries, delegando eles para serem processados pelos seus respectivos Handlers Pacote MediatR
MediatR.Extensions.Microsoft.DependencyInjection
Basicamente é uma cadeia de caracteres com dados da aplicação e usuário em base64, além de uma chave gerada com um algoritmo de hashing como o SHA256. Essa chave é gerada através de uma chave secreta definida na aplicação e que é validada ao receber a requisição. O JWT é enviado via cabeçalho Authorization.
Ferramenta gratuita e open-source para testes unitários, sendo a principal opção atualmente junto com o NUnit. Funciona com o .NET Core, .NET Framework, Universal Windows Apps e Xamarin. Tem um template prório para o .NET Core, tanto via linha de comando quanto pelo Visual Studio 2019. Em um projeto de testes do xUnit, basta criar uma classe e inserir o método com a anotação [Fact].
public class ProjectTests
{
[Fact]
public void TestIfProjectStartWorks()
{
var project = new Project("Nome De Teste", "Descricao de Teste", 1, 2, 10000);
Assert.Equal(ProjectStatusEnum.Created, project.Status);
Assert.Null(project.StartedAt);
Assert.NotNull(project.Title);
Assert.NotEmpty(project.Title);
Assert.NotNull(project.Description);
Assert.NotEmpty(project.Description);
project.Start();
Assert.Equal(ProjectStatusEnum.InProgress, project.Status);
Assert.NotNull(project.StartedAt);
}
}