Ó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);
    }
}