Desenvolvimento - C#

Dez razões para adotar o Linq nas aplicações .Net

Neste artigo serão abordadas dez razões para se adotar o LINQ (Language Integrated Query) nas aplicações .NET.

por Renato Haddad



Tecnologias utilizadas: LINQ

Sumário:

Neste artigo vou abordar dez razões para se adotar o LINQ (Language Integrated Query) nas aplicações .NET.

Introdução

O LINQ (Language Integrated Query) é uma linguagem de consulta integrada a ser usada em coleções de dados. Muitos pensam que o LINQ é usado apenas para consulta à banco de dados e isto não é verdade. O que o LINQ TO SQL e o ADO Entity Framework permitem é construir uma classe que é o modelo de objeto relacional OR/M para que as classes do LINQ as manipule. Na verdade, nos bastidores são coleções, então, podemos usar o LINQ em qualquer tipo de fonte de dados, sendo uma classe, uma coleção, um array, enfim, qualquer tipo de objeto que seja do tipo IEnumerable ou IQueryable. Veja os dez motivos para se adotar o LINQ em aplicações .NET:

1 – Padronização do código

Todos os códigos escritos com o LINQ são padronizados. A própria sintaxe força o desenvolvedor a usar determinada sequência de códigos para que todos possam entender. Os padrões de programação quando lidamos com consultas são os mais diversos no cenário de um time de desenvolvedores, onde cada um cria o próprio código. É fato que criar um framework numa empresa para engessar os desenvolvedores, não é muito difícil e anormal, em fábricas de softwares isto é comum. Já com o LINQ o cenário é um tanto diferente porque a própria consulta que o desenvolvedor irá criar é consideravelmente menor em relação a quantidade de códigos a serem escritos. Agora, imagine se você criar um framework próprio onde o retorno serão coleções IEnumerable ou IQueryable.  A quantidade de linhas do seu framework vai diminuir consideravelmente. Resumindo, o padrão de codificação será respeitado pela própria sintaxe do LINQ, por exemplo, ao invés de fazer looping para varrer uma datatable, um List (com o Generics), um array ou qualquer outra coleção, com o LINQ isto será apenas uma única linha.

2 – Expressões Lambda

O nome assusta, mas depois de você conhecer, entender e usar, afirmo que é amor a primeira vista. Acreditem, é impressionante a quantidade de códigos que uma expressão Lambda reduz na programação. A dupla Lambda e LINQ não podia ser melhor, pois os métodos do LINQ permitem usar Lambda o tempo todo.

Costumo brincar em palestras que ministro que expressões Lambda você demora um pouco para aprender bem, mas vale muito a pena. Pesquise sobre isto.

3 – Fonte de dados

Em relação à fonte de dados do banco de dados, você pode usar qualquer banco de dados que tenha um driver/provider criado para o LINQ. Isto significa dizer que o ADO.NET Entity Framework usará o driver para se conectar e mapear qualquer base de dados, por exemplo, Oracle, DB2, SQL Server, ODBC, etc. Já o LINQ TO SQL foi criado somente para o SQL Server 2000 ou superior. Além disto, lembre-se que qualquer array, list (Generics), classes, XML ou coleção IEnumerable ou IQueryable serve para o LINQ.

Se você desenvolve aplicações móveis com o Windows Mobile 6, saiba que o LINQ para Dataset e o LINQ para XML é suportado. Por enquanto não existe o LINQ para SQL Compact Edition (.sdf) no dispositivo, somente se você usá-lo no desktop.

4 – Código limpo, claro e de fácil manutenção do código

Este é um ponto forte no LINQ. Escrever um código limpo não é para muitos, principalmente para otimizar e maximizar o código. Já um código claro que não precise de documentação e comentários é mais difícil ainda, vocês já devem ter visto diversos códigos escritos por desenvolvedores com diversos níveis, então, sabe o que estou dizendo. Já a manutenção então, já experimentou dar manutenção num código que não foi você que escreveu? Então, sabe muito bem o que significa isto, ler o código, entender o raciocínio, rodar com o debug para entender o fluxo é coisa comum num time. Enfim, com o LINQ, escrever um código limpo e claro é regra obrigatória pela própria sintaxe. Quem vai ganhar com isto é a manutenção quando se precisar alterar algo.

5 - Modelo de Objeto Relacional (OR/M)

O sonho de muitos desenvolvedores é usar o OOP num banco de dados, principalmente o SQL Server. O Visual Studio .NET 2008 (com o Service Pack 1) permite criar modelos de objetos relacionais baseados em qualquer banco de dados que tenha o driver para tal finalidade. Tanto para o LINQ TO SQL quanto para o ADO.NET Entity Framework a maneira de criar o modelo é parecida. Ou você monta a conexão com o banco de dados no Server Exporer e arrasta os objetos (tabelas, consultas e Stored Procedures) ou seleciona os objetos numa lista, dependendo do caminho e do template escolhido. O fato é que isto é tão simples que as alterações na estrutura do banco são refletidas diretamente no modelo. No Entity Framework, basta clicar com o botão direito no modelo e pedir para atualizar. Já no LINQ TO SQL é preciso excluir e arrastar o objeto novamente. Nos bastidores será criada uma classe contendo todos os objetos, os relacionamentos, as propriedades dos mesmos, e o melhor de tudo é que as rotinas de Insert, Delete e Update também. Ou seja, tudo está encapsulado no modelo gerado automaticamente.

6 – Redução considerável do número de linhas na programação

Esta é uma questão de otimizar as rotinas. Pegue um papel e uma caneta ou crie um código no VS.NET para a seguinte situação: dado um array com números aleatórios de 0 a 50, como saber quais números são maiores que 20? Provavelmente você criaria um looping para percorrer cada item do array, faria um IF para avaliar a condição, e conforme o resultado listaria o item ou iria para o próximo. Quantas linhas você precisa para isto? Escreva ai o algoritmo! Ah, esqueci de dizer que quero que o resultado da lista esteja em ordem crescente, ok. Então, com o LINQ precisamos de apenas uma única linha, por exemplo, var resultado = from n in números where n > 20 orderby n select n.

7 – Extensão de classes

As classes geradas pelo modelo de objeto relacional são do tipo partial class e os métodos são partial void. Com isto podemos criar diversos outros arquivos com o mesmo nome da classe sendo do tipo partial class e extender qualquer método, pois são partial void. No Entity há somente um método extensível, mas no LINQ TO SQL todos são extensíveis. Isto nos dá um horizonte enorme em relação a criar novos métodos separados do OR/M, pois se houver alguma atualização do mesmo, todos os métodos estendidos serão preservados, pois estão em arquivos separados.

8 – Fácil Aprendizado

Pela própria facilidade de uso e clareza dos códigos, digo que o aprendizado do LINQ é muito rápido. Se você não conhecer programação orientada a objetos (OOP) não tem problema, é fácil, mas se você conhece OOP terá muito mais facilidade, principalmente quando lidar com o modelo de objeto relacional.

9 – Permite usar Stored Procedures

Stored Procedures são muito usadas em qualquer tipo de projeto, pelas vantagens de segurança, performance e escalabilidade. Quando se cria o OR/M, pode-se adicionar as SPs existentes na base dados. Porém, há uma grande diferença: no LINQ TO SQL uma SP vira um método, ou seja, qualquer SP é possível arrastar no OR/M e usá-la como um método, passando parâmetros ou não. Já no Entity Framework não é possível adicionar qualquer SP, pois é preciso mapear uma tabela no modelo. Mas, se você tiver SPs para Insert, Delete e Update referente a uma tabela, no modelo basta informar na classe mapeada as respectivas SPs para que estas sejam automaticamente invocadas quando da operação. Vale dizer que as SPs podem ter parâmetros de entrada e saída.

10 – Esteja preparado para o que há de mais novo para o presente e futuro

Se você estudar um pouco das novidades que a Microsoft tem lançado, por exemplo, ASP.NET Dynamic Data, ASP.NET MVC e ADO.NET Data Services verá que tudo está baseado no modelo de objeto relacional criado por você a partir de uma fonte de dados. Sendo assim, aprender o LINQ só vai te trazer vantagens em todos os aspectos, principalmente para agregar conhecimento e deixá-lo preparado para o que há de mais novo no mercado. Conhecimento nunca é demais, o que precisamos é de tempo para aprender, então, foque no aprendizado e se dedique.

Conclusão

Use e abuse dos recursos do Dynamic Data e do LINQ para ser um parceiro na produtividade no projeto. Aprofunde os estudos em customizações do Dynamic Data para você conseguir automatizar qualquer tipo de aplicação, desde as regras de negócios, layout e requisitos do sistema.

Referências

Página do LINQ http://msdn.microsoft.com/en-us/netframework/aa904594.aspx.

Renato é autor do livro LINQ e C# 3.0 - A Solução em Consultas para Desenvolvedores.
http://www.linhadecodigo.com.br/Livro.aspx?id=3759.

Renato Haddad

Renato Haddad - MVP, MCPD e MCTS, palestrante em eventos da Microsoft em diversos países, ministra treinamentos focados em produtividade com o VS.NET 2008, ASP.NET 3.5, Reporting Services e Windows Mobile.