Neste artigo veremos como implementar o padrão Repository fazendo o cache e usar o HangFire de forma a obter um melhor desempenho em uma aplicação ASP .NET Core usando a arquitetura cebola. |
Continuando a segunda parte do artigo vamos criar o controlador e iniciar os
testes.
Criando o controlador AlunosControllers
No projeto Api, na pasta Controllers crie o controlador AlunosController:
[Route("api/[controller]")]
[ApiController]
public class AlunosController : ControllerBase
{
private readonly IAlunoRepository _repository;
public AlunosController(IAlunoRepository repository)
{
this._repository = repository;
}
[HttpGet]
public async Task<IReadOnlyList<Aluno>> Get()
{
return await _repository.GetAllAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Aluno>> Get(int id)
{
var aluno = await _repository.GetByIdAsync(id);
if (aluno == null)
{
return NotFound();
}
return aluno;
}
[HttpPut("{id}")]
public async Task<IActionResult> Put(int id, Aluno aluno)
{
if (id != aluno.Id)
{
return BadRequest();
}
await _repository.UpdateAsync(aluno);
return NoContent();
}
[HttpPost]
public async Task<ActionResult<Aluno>> Post(Aluno aluno)
{
await _repository.AddAsync(aluno);
return CreatedAtAction("Get", new { id = aluno.Id }, aluno);
}
[HttpDelete("{id}")]
public async Task<ActionResult<Aluno>> Delete(int id)
{
var aluno = await _repository.GetByIdAsync(id);
if (aluno == null)
{
return NotFound();
}
await _repository.DeleteAsync(aluno);
return aluno;
}
}
|
Implementamos os métodos HTTP GET para realizar as operações CRUD.
Inicialmente vamos executar o projeto e visualizar a
interace do Swagger exibindo os endpoints:
Agora vamos acessar o endereço /jobs e visualizar o dashboard do Hangfire:
Vemos que o Hangfire esta em execução.
Agora vamos usar o Postman e fazer um request GET inicial para https://localhost:7024/api/alunos
Com esta é a primeira requisição os dados ainda não estão no cache e podemos verificar que o tempo gasto foi algo em torno de 1284 ms.
Agora os dados estão no cache. Vamos repetir a consulta e verificar o tempo gasto:
Observe que o tempo gasto caiu drasticamente para 26 ms visto que agora estão vindo do cache e não do banco de dados.
Agora vamos modificar o conjunto de registros adicionando um novo aluno. Por teoria, essa ação deve invalidar o cache existente e acionar a função RefreshCache e defini-la como Hangfire.
Consultando o painel do Hangfire podemos ver que o cache foi recarregado corretamente:
Pegue o projeto aqui: AlunosWeb.zip ...
"Nada façais por contenda ou por vanglória, mas por
humildade; cada um considere os outros superiores a si mesmo."
Filipenses 2:3
Referências: