Projetando com Generics - .Net Magazine 63

Quando falamos de Generics, estamos frisando um comportamento como seu próprio nome já diz, genérico. Artigo da Revista .NET Magazine - Edição 63.

Esse artigo faz parte da revista .NET Magazine edição 63. Clique aqui para ler todos os artigos desta edição

Clique aqui para ler essa revista em PDF.

Projetando com Generics

 

Quando falamos de Generics, estamos frisando um comportamento como seu próprio nome já diz, genérico. Com isso, a criação de novos projetos fica facilitada, podendo fazer uso de um modelo base, que permite o reuso de funcionalidades independentes dos tipos dos objetos tratados no momento. Falando mais abertamente, imagine uma função que lhe retorne o resultado de uma simples consulta de forma “tipada", ou seja, retorna uma listagem de objetos do tipo “Usuário”, com todas as propriedades que nada mais são que um espelho dos campos da tabela de Usuários, nome, login, e-mail etc. Se surgisse a necessidade de criar uma nova consulta, dessa vez de Veículos, sem Generics, pouco poderia se aproveitar do código criado anteriormente, afinal, o tipo retornado força a entidade espelho da primeira tabela consultada, que é de Usuários, não servindo para segunda tabela criada de Veículos, que logicamente possui campos específicos como marca do veículo, placa, modelo, ano etc., que são totalmente diferentes da tabela de Usuários. Aplicando Generics, isso deixa de ser um problema, e passa ser uma ótima solução, pois não existe menor problema em criar uma função que retorne uma listagem de “Usuários” ou “Veículos”, e ainda retorná-las com seus verdadeiros tipos, não havendo a necessidade da conversão para objetos de Array, ArrayList, entre outras collections, saídas que já foram interessantes principalmente no framework 1.1, utilizadas para tentar se padronizar um retorno. Mas fazendo dessa outra forma sem Generics, além de não termos tipos de objetos espelhos de uma entidade criada, obviamente acaba se perdendo o conforto do “IntelliSense”, o que acaba obrigando quem faz uso do objeto, saber qual o tipo para forçar o Cast.

 

Nota

Repare que Generics vai bem além do famoso “overload”, que é ter a mesma função replicada dentro da mesma classe, podendo esperar quantidades e tipos diferentes de parâmetros e também retornar tipos específicos. A grande diferença, é que com Generics, não é preciso replicar métodos, garantindo assim que o tratamento seja exatamente o mesmo, independente se o objeto esperado e retornado é do tipo “X” ou “Y”. Mas não devemos interpretar Generics como uma extensão do “overload”, afinal, nada impede de criarmos uma função genérica com a quantidade de parâmetros diferentes, para isso, teria que trabalhar com os dois recursos, criando um “overload” da sua função genérica.

 

Perceba que trabalhando dessa forma fica muito mais fácil aplicarmos Orientação a Objetos, todo retorno terá um tipo, será um objeto, e poderá ser reaproveitado a qualquer momento, não engessando o retorno para um tipo específico.

Para visualizarmos na prática onde podemos aplicar Generics como base para trafegarem dados dentro de uma aplicação, vamos construir uma página de exemplo, que embora contenha poucos controles e uma tela relativamente simples, poderá certamente servir como base estrutural para criação de projetos pequenos, médios ou até mesmo grande porte. Ao final da matéria, teremos o resultado mostrado conforme Figura 1.

 

Figura 1. Resultado da aplicação ao final da matéria

 

Criando a estrutura para consulta

Primeiramente vamos criar uma tabela de consulta, para então iniciar o projeto fazendo uso do Generics. Dentro do modo designer do seu SQL Server, crie uma tabela contendo três campos: UsuarioID do tipo int, Nome do tipo varchar(128) e DataDeAlteracao do tipo datetime, para facilitar visualize a estrutura apresentada na " [...] continue lendo...

Artigos relacionados