none
Duvidas sobre métodos na Camada de negócio RRS feed

  • Pergunta

  • Salve galera,

    Nos meus projetos eu crio as classes de entidades e a classe de negócio, na minha classe de negócio eu crio métodos tais como

    Public List<clsCliente> GetAll();
    Public List<clsCliente> GetAllByCidade(clsCidade objCidade);

    ate aqui tudo bem, sem problemas pra kd método eu faço a conexão com a camada de dados, busco os dados ETC.

    Hoje estáva olhando um projeto de um amigo, e me deparei com uma técnica que torna isto bem + prático no método GetAllByCidade ele codificou desta forma

    return GetAll().Where(c => c.Cidade = objCidade).ToList();

    Minha duvida é: A praticidade de se criar os métodos com base em + genérico via LINQ vale a pena se for levar em conta a performance?


    1000ton - MSN: milton.filho@msn.com
    terça-feira, 17 de novembro de 2009 12:42

Respostas


  • Milton,

    Discordo com os amigos, olhando o trecho de código que você postou vejo claramente onde está o problema, você não deveria estar retornando um List<> e sim um IQueryable<T>.

    Public List<clsCliente> GetAll();

    return GetAll().Where(c => c.Cidade = objCidade).ToList(); <-- desta forma você carrega uma List<clsCliente >  em memória e utiliza o .Where(c => c.Cidade = objCidade) para fazer um filtro, porem você trouxe todos os registros do banco de dados para a memória e filtrou em memória.

     

    Em outra palavras a interface genérica IQueryable<> faz com que você somente traga os dados depois de montar todo o SQL que será executado no banco.

    Public IQueryable <clsCliente> GetAll();
    return GetAll().Where(c => c.Cidade = objCidade).ToList()
    <-- agora ele vai ao banco e traz somente as cidades atenderem a condição.


    Wilson Vernay MCP MCAD MCSD
    • Sugerido como Resposta Vernay segunda-feira, 26 de abril de 2010 18:33
    • Marcado como Resposta MiltonFilho terça-feira, 27 de abril de 2010 02:22
    quarta-feira, 18 de novembro de 2009 20:15

Todas as Respostas

  • Acredito na praticidade de utilizar o LINQ. Porém isso não funciona em casos onde a pesquisa de todos os registro no banco demore muito, nesse caso é melhor filtrar no momento de recuperar as informações da base dedos.
    terça-feira, 17 de novembro de 2009 16:35
  • O Rodrigo está certo, se a consulta demanda muitos registros vc vai se dar mal nesta abordagem.
    Eu prefiro evitar esse tipo de coisas...
    Até...
    terça-feira, 17 de novembro de 2009 19:45
  • Realmente em conversa com uns amigos aqui resolvi deixar a praticidade de lado neste tipo de caso. Só vou usar assim em objetos onde a quantidade de registros seja bem baixa.

    Valeu galera :)
    1000ton - MSN: milton.filho@msn.com
    quarta-feira, 18 de novembro de 2009 02:25

  • Milton,

    Discordo com os amigos, olhando o trecho de código que você postou vejo claramente onde está o problema, você não deveria estar retornando um List<> e sim um IQueryable<T>.

    Public List<clsCliente> GetAll();

    return GetAll().Where(c => c.Cidade = objCidade).ToList(); <-- desta forma você carrega uma List<clsCliente >  em memória e utiliza o .Where(c => c.Cidade = objCidade) para fazer um filtro, porem você trouxe todos os registros do banco de dados para a memória e filtrou em memória.

     

    Em outra palavras a interface genérica IQueryable<> faz com que você somente traga os dados depois de montar todo o SQL que será executado no banco.

    Public IQueryable <clsCliente> GetAll();
    return GetAll().Where(c => c.Cidade = objCidade).ToList()
    <-- agora ele vai ao banco e traz somente as cidades atenderem a condição.


    Wilson Vernay MCP MCAD MCSD
    • Sugerido como Resposta Vernay segunda-feira, 26 de abril de 2010 18:33
    • Marcado como Resposta MiltonFilho terça-feira, 27 de abril de 2010 02:22
    quarta-feira, 18 de novembro de 2009 20:15
  • uhmmm vou testar aqui depois posto o resultado 

    valeu manim :)

    1000ton - MSN: milton.filho@msn.com
    quinta-feira, 19 de novembro de 2009 10:09