Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Convenção para argumentos de uma Controller

Qual o padrão que devo usar para os argumentos das minhas Controllers? Devo usar 1 único tipo complexo ou devo quebrar em vários tipos primitivos? Além disso, posso usar tipos primitivos misturados com tipos complexos? Claro que tudo depende do que a Controller faz... Mas gostaria de saber se existe uma diretriz para me dizer o seguinte: Quando espero somente um ID, coloque campo primitivo, quando espero um ID + 2 campos, ainda coloque tipos primitivos, quando tiver mais de X argumentos, faça um DTO e coloque como argumento na Controller. Espero ter sido claro.

3 respostas

Olá Philippe, tudo bem?

Na verdade isso vai bem da necessidade do seu projeto. Geralmente quando se usa envio de formulários via post, a action que é chamada pelo clique do botão receberá valores de um objeto específico que normalmente tem seu uso em vários pontos do sistema. Neste caso faz sentido usar um tipo complexo.

Mas se a action for receber alguns dados, que não compõe nenhum tipo complexo do seu sistema, você poderia fazer o uso de tipos primitivos.

Acredito que uma boa regra seria se os argumentos que serão recebidos conseguem formar um objeto do seu sistema, então espere receber um objeto, caso contrário, receba apenas os tipos primitivos.

Bons estudos!

Opa! Tudo bem e você?

Entendido, mas e quanto a mistura de primitivos e complexos... é "errado" (não é convencional) utilizar?

Exemplo: ConsultarLivros(string ordem, FiltroLivrosDTO filtro)

solução!

Opa, tudo certo!

Isso é visto comumente na API do .NET, como na classe StreamWriter:

Temos esse construtor: public StreamWriter(string path, bool append, Encoding encoding, int bufferSize); que mistura um monte de tipos primitivos com um tipo complexo.

Se o construtor ou método precisa de uma mistura de tipos, não tem problema. Se um tipo complexo resolver, ótimo. Se um tipo complexo não for suficiente, ótimo também!

Esse seu exemplo é perfeitamente normal.

Bons estudos!