Evite o uso excessivo de DataSets

Nos últimos meses tenho tido a oportunidade de participar de alguns projetos com a plataforma .NET de forma mais intensa. O que me chamou atenção quando observei o design de algumas dessas soluções foi o uso exagerado de DataSets, o que incide em diversos problemas que comprometem tanto a performance quanto a flexibilidade.

Antes de qualquer coisa, é importante admitir que o DataSet é um mecanismo de manipulação de dados com diversas funcionalidades e que ocupa um importante papel dentro do ADO.NET. Porém, devemos analisar com cautela os casos onde devemos utilizá-lo.

Usar um DataSet em todas as situações onde você precisa manter algo em memória não é, nem de longe, uma boa prática. Se você pretende desenvolver uma aplicação OO, separando de forma coerente as suas camadas, dificilmente terá um DataSet em outra camada que não seja a responsável pela persistência.

Lembre-se de que o DataSet é, em última análise, um conjunto de dados desconectado. Uma cópia em memória das principais características da fonte de dados. Dessa forma, manipular os registros de um DataSet ao invés de objetos de negócio no cliente tem um forte sabor procedural e uma tendência à repetição de código. É altamente considerável evitar isto!

Desempenho. Você já parou para pensar que na maioria dos casos você não precisaria de um DataSet? O fato de o DataReader ser um cursor forward-only (não mantendo os registros em memória) o torna mais performático que o DataSet. Levando-se em consideração que numa aplicação OO, de uma forma geral, você apenas usa o DataSet para recuperar o estado dos seus objetos, substituí-lo por um DataReader aumentará consideravelmente a performance da aplicação.

Estes e outros motivos nos mostram mais um caso de utilização equivocada de um recurso. O problema não é o DataSet (muito pelo contrário), mas sim o desconhecimento ou uma interpretação errada das motivações e intenções do componente. Enfim, aí estão minhas considerações pessoais sobre o uso de DataSet em aplicações ASP.NET. Veja as referências abaixo e tire suas próprias conclusões!

Referências

http://aspnet.4guysfromrolla.com/articles/050405-1.aspx
http://www.simple-talk.com/dotnet/.net-framework/should-you-use-ado.net-datareader-or-dataset/

3 Respostas

  1. Muito bom!!

    Eu usava o DataReader até me desviarem(no meu antigo emprego) não lembro por qual motivo,começei a usar o dataset em tudo. “lá na empresa era padrão” o uso de dataset.

    essa explicação ai foi show de bola. valeu!!!

  2. O problema é quando os primeiros desenvolvedores do projeto não conhecem as alternativas ao DataSet e implementam toda a infra-estrutura do sistema orientada à DataSet como se ele fosse um DTO genérico…

    Não sei exatamente qual o tamanho inicial de um DataSet ao instanciar, mas tenho certeza de que um objeto desse tamanho trafegando para cima e para baixo no sistema é algo bastante custoso!

    No mais, acho que uns exemplos de conversão de DataSet para DataReader ( que, pasme, nunca ouvi falar ), ou mesmo de mau-uso dos DataSets seriam interessantes para ilustrar mais seu ponto de vista!

    Valeu! =D

  3. Excelente artigo! Concordo o seu ponto de vista.

Deixe uma resposta