1
resposta

Adiciona Filmes deveria retornar um DTO tbm?

Seguindo o princípio de que os Dtos são usados pra não trafegar nunca o objeto do domínio (model) para a camada de apresentação, o método AdicionaFilme na verdade não deveria retornar um objeto do Filme (model) né?

Acredito que deveria estar retornando um ReadFilmeDto.

Principalmente levando em consideração se tivesse informação do model que eu não quisesse mostrar pra camada de apresentação.

1 resposta

Olá, Luciano! Como vai?

Você está correto em pensar que, seguindo o princípio de não trafegar o objeto do domínio para a camada de apresentação, seria mais adequado retornar um objeto do tipo ReadFilmeDto em vez do modelo Filme.

Ao retornar um DTO, você tem mais controle sobre as informações que são enviadas para a camada de apresentação, podendo ocultar dados sensíveis ou informações que não são necessárias para a exibição. Além disso, isso também facilita a manutenção do código, pois evita a necessidade de alterar o contrato da API caso haja mudanças no modelo Filme.

Para realizar essa conversão de forma mais eficiente, você pode utilizar o AutoMapper, que é uma biblioteca muito útil para mapear objetos entre diferentes classes. Com o AutoMapper, você pode definir perfis de mapeamento que ensinam como converter um objeto para outro.

No seu caso, você pode criar um perfil de mapeamento para converter o CreateFilmeDto para Filme e outro para converter Filme para ReadFilmeDto. Dessa forma, você pode utilizar o AutoMapper no método AdicionaFilme para realizar a conversão de forma automática.

Aqui está um exemplo de como você pode utilizar o AutoMapper no seu código:

// No seu Startup.cs, no método ConfigureServices, adicione o AutoMapper
services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

// No seu FilmeController.cs, no método AdicionaFilme
public IActionResult AdicionaFilme(CreateFilmeDto filmeDto)
{
    // Utilize o AutoMapper para converter o filmeDto para Filme
    var filme = _mapper.Map<Filme>(filmeDto);

    // Faça as operações necessárias para adicionar o filme ao sistema

    // Utilize o AutoMapper para converter o filme para ReadFilmeDto
    var readFilmeDto = _mapper.Map<ReadFilmeDto>(filme);

    // Retorne o readFilmeDto como resposta da requisição
    return Ok(readFilmeDto);
}

Dessa forma, você estará retornando um objeto ReadFilmeDto no método AdicionaFilme, garantindo que apenas as informações necessárias sejam enviadas para a camada de apresentação.

Espero ter ajudado! Se tiver mais alguma dúvida, é só me dizer. Bons estudos!