Ótimo post amigo. Tive até uma conversa com um colega de trabalho sobre o uso da Clean Architecture no sistema que desenvolvemos. Temos uma aplicação MVC, então front e back ficam no mesmo projeto e ela foi criada segundo a Clean Architecture. A conversa era sobre se fazia sentido essa arquitetura em um projeto MVC. Fui favorável. Gostaria de saber sua opinião.
Uma outra dúvida que sempre me ocorreu e que foge a CA é quanto ao uso do Mediator como padrão. Sempre fui meio cético quanto a ele. Quais são os reais benefícios? Quais as vantagens?
O que eu ganho entre o seu controller citado no post em relação ao de baixo?
[ApiController]
[Route("api/[controller]")]
public class WebinarsController : ControllerBase
{
private readonly ICreateWebinarUseCase _createWebinarUseCase;
private readonly IGetWebinarByIdUseCase _getWebinarByIdUseCase;
public WebinarsController(
ICreateWebinarUseCase createWebinarUseCase,
IGetWebinarByIdUseCase getWebinarByIdUseCase)
{
_createWebinarUseCase = createWebinarUseCase;
_getWebinarByIdUseCase = getWebinarByIdUseCase;
}
[HttpPost]
public async Task<IActionResult> CreateWebinar([FromBody] CreateWebinarCommand command)
{
var webinarId = await _createWebinarUseCase.ExecuteAsync(command);
return CreatedAtAction(nameof(GetWebinar), new { id = webinarId }, webinarId);
}
[HttpGet("{id}")]
public async Task<IActionResult> GetWebinar(Guid id)
{
var webinar = await _getWebinarByIdUseCase.ExecuteAsync(id);
return Ok(webinar);
}
}