Renato
Haddad
Microsoft MVP,MCT, MCPD e MCTS.
Maio 2009
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
1. Padronização do código
2. Expressões lambda
3. Fonte de dados
4. Código limpo, claro e de
fácil manutenção
5. Modelo do Objeto
Relacional (OR/M)
6. Redução considerável do
número de linhas na programação
7. Extensão de classes
8. Fácil aprendizado
9. Permite o uso de Store
Procedures
10. Prepare-se para o que há
de mais novo no presente e no futuro
Conclusão
Referências
Sobre o Autor
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
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 o uso de 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 – Prepare-se para o que há de mais novo no presente e
no 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.
Livro LINQ e C# 3.0 – A
Solução em Consultas para Desenvolvedores
- Renato Haddad
Sobre o Autor
Renato Haddad (rehaddad@msn.com – www.renatohaddad.com
) é MVP, MCT, 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, LINQ, Reporting Services e Windows Mobile. Visite o blog http://weblogs.asp.net/renatohaddad
. Renato é autor do livro LINQ
e C# 3.0 – A Solução em Consultas para Desenvolvedores
Início da Página