none
WCF Unica chamada x Varias chamadas RRS feed

  • 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!

    segunda-feira, 2 de maio de 2011 13:56

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...

    terça-feira, 3 de maio de 2011 17:58
    Moderador
  • Leonardo, eu costumo deixar se a regra for do serviço e a application não precisa saber.

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC
    quarta-feira, 4 de maio de 2011 11:57
  • 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.

     

    segunda-feira, 16 de maio de 2011 00:38