Inquiridor
WCF Unica chamada x Varias chamadas

Pergunta
-
Pessoal, bom dia!
Tenho uma dúvida referente ao uso de WCF. Imaginemos uma aplicacao que precise obter OrderHeaders e OrderDetail de um banco de dados.
A logica da base é: cada OrderHeader tem uma OrderDetail (ou seja, OrderDetail tem um OrderHeaderID).Na minha aplicacao, camada de dados, tenho dois métodos: obter ordens, que retorna todos os ordeDetails e obterUm, que me retorna orderDetail e uma List<OrderHeader>.
A dúvida é: é melhor, ou tem diferença, eu fazer duas chamadas ao servico (uma para trazer o orderDetail e outra para a lista) ou é aconselhável eu fazer essa lógica no serviço (meu serviço retorna orderHeader + List<OrderDetail>.
Esse exmplo é uma escala reduzida para ilustrar minha d;uvida. Queria uma resposta que fosse boa para grandes volumnes de dados. Basicamente, a pergunta é: é mlehor eu chamar o serviço várias vvezes eobter pequenos dados ou apenas uma vez e obter 'varios dados.
Obrigado!
Todas as Respostas
-
Depende de cada projeto, da arquitetura envolvida, e das metricas predominantes de seu sistema (se ele deve ser de alta performance ou nao e etc)
Mas acho que num contexto geral, cria um metodo para retornar apenas os OrderHeader e um outro metodo que retorne os OrdersDetais de um unico OrderHeader funciona muito bem...
-
-
Então, mas a logica é quando se trabalhar com apenas um registro, deve-se trazer tudo (seria o caso dos detalhes. Entao vc filtra com os headers e quando clica em um header traz os details). Na minha visão, a melhor maneira de fazer é ter um método ObterUm(int headerID) que me retorna header + detail, para poucar chamadas desnecessárias.
No exemplo, é um tanto boba a situaçao, mas no caso de usuarios: usuário tem um grupo e permissoes. QUando o trabalho com um registro, novamente, vejo todos os detalhes, ou seja, USUARIO + PERMISSOES + GRUPO. Nao seria melhor e mais eficiente no meu método ObterUm(int userID) me retornar um VO de usuario com grupo e permissoes de uma vez, ao inves de trazer o user para a UI (Silverlight), depois chamar permissoes e por ultimo grupo? Lembrando que no silverlight o servico é assincrono, ou sejam devo esperar o usuario trazer resposta para chamar permissoes e depois grupo, ou seja, a tela é preenchida aos poucos, além de transformar o controle do bloqueio de tela (busy indicator) mais complicado e minha viewmodel mais complexa, pois teria controles e métodos desnecessários.