Gostaria de entender melhor a diferença entre usar o "public Task <ActionResult<"ClasseQualquer">> NomeDoMetodo()" ou de usar apenas "public IActionResult NomeDoMetodo()"
Gostaria de entender melhor a diferença entre usar o "public Task <ActionResult<"ClasseQualquer">> NomeDoMetodo()" ou de usar apenas "public IActionResult NomeDoMetodo()"
Fala ngelo, beleza?
As duas formas funcionam como um retorno, a diferença é:
public IActionResult NomeDoMetodo()
é um retorno genérico onde qualquer classe que implementa IActionResult
pode ser retornada.
public Task <ActionResult<"ClasseQualquer">> NomeDoMetodo()
estamos espeficicando um ActionResult com um tipo que pode ser qualquer classe, nesse caso deixamos claro qual é o tipo do objeto que vai ser retornado.
Dá pra perceber essa diferença no swagger que é uma ferramenta que funciona como uma documentação para api.
IActionResult O retorno fica genérico
ActionResult
O retorno fica específico
Eu ainda não to manjando de usar o service e repositories injetando dependencia... mas aqui o meu retorno com IActionResult, está igual ao seu com ActionResult... Mas acho que entendi que, com o Action, você consegue determinar que o retorno só pode ser daquela class/entidade específica. Onde numa situação do retorno de uma query fosse errado por exemplo, ao inves de ter feitar a query para despesas fizesse para receita, o ActionResult não permitiria. Por que ele aguarda o retorno, no seu exemplo, de DespesaDto, e veio um de ReceitaDto. Seria isso? Mas no ponto de funcionamento não muda né? Performance e tal, tudo igual, so "perdemos esse controle" ao usar a interface.
Isso mesmo, com o Action, você consegue determinar que o retorno só pode ser daquela classe/entidade específica! não influencia na performance! Mas deixar de forma clara o que vai ser retornado facilita no entendimento do código
Obs: As imagens que postei são do swagger sem executar qualquer ação, ou seja aquele exemplo que aparece onde tem o ActionResult é do momento assim que roda o projeto antes mesmo de fazer a solicitação para rota, o seu só com o IActionResult apareceu essa forma antes de executar a rota?
Sim, apareceu ja com o modelo. Acho que isso é do swagger mesmo. não tem a ver com o IAction e Action. Mas consegui entender melhor e internalizar de fato a utilidade. Obrigado. Vou passar adota a Action de agora em diante, pois me parece ser uma melhor prática. Mas entendo que nada impede de usar a IAction tambem. Obrigado!