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.