Artigo do tipo Tutorial
Recursos especiais neste artigo:
Artigo no estilo Mentoring.
Cenário
A abstração é um dos conceitos mais importantes no desenvolvimento de softwares orientados a objetos, sendo que quanto mais abstrata uma solução, maiores as chances de reuso da mesma. Diversas práticas podem ser aplicadas para nos ajudar nesta tarefa, uma delas é o uso de Design Patterns. Os design patterns nos fornecem meios para solucionar problemas e desafios que nos deparamos diariamente no desenvolvimento de software. Um destes padrões é o DAO – Data Access Objects – que visa separar todo o código de acesso a dados do sistema em uma classe específica, isolando tais códigos do resto da aplicação, desta forma, se nosso projeto tem uma classe Cliente, então teríamos também a classe ClienteDAO, com todo o código necessário para realizar o acesso a dados de clientes no sistema.


Em que situação o tema é útil

O uso de Generics pode trazer grandes benefícios no desenvolvimento de arquitetura e soluções reutilizáveis de software, permitindo aumentar o reuso e consequentemente a produtividade da equipe de desenvolvimento, sendo que o mesmo pode ser usado em qualquer camada server-side onde se tenha alguma classe cujo comportamento independe do tipo com o qual se está trabalhando, como por exemplo para o comportamento básico das DAOs.

O Generics é um recurso do .NET que nos fornece uma grande flexibilidade no desenvolvimento, permitindo criar classes altamente reutilizáveis com o uso de tipos genéricos, que são definidos apenas no momento de uso da classe. Apesar de sua existência não ser recente, muitas equipes ainda relutam em utilizá-lo, ou muitas vezes não conseguem extrair de todo o seu potencial.

Este artigo tem o intuito de desmistificar tal assunto permitindo ao leitor identificar as oportunidades de uso de Generics em seus projetos, sendo que para nosso estudo de caso veremos a aplicação do Generics em classes de acesso a dados.

Antes de demonstrar os benefícios do uso de Generics, vamos compreender o problema e como muitas equipes de desenvolvimento implementam suas camadas de acesso a dados.

É comum vermos camadas de acesso a dados sem nenhuma abstração, com uso direto de classes concretas. Muitas vezes estas classes até fazem uso de frameworks ORM, porém repetem todo o código de acesso a dados básico dos objetos do sistema, alterando apenas os tipos com o qual a classe trabalha. Na Listagem 1 e 2 temos um exemplo desta implementação, onde podemos ver duas classes de acesso a dados, sendo a primeira (Listagem 1) voltada para atuar com os dados de clientes e a segunda (Listagem 2) voltada para trabalhar com dados de fornecedores.

Listagem 1. Exemplo de implementação concretas de DAO para Cliente

01     using System;
02     using System.Collections.Generic;
03     using System.Linq;
04     using System.Text;
05     using GenericsMentoring.Model;
06
07     namespace GenericsMentoring.DAO
08     {
09         public class ClienteDAO
10         {
11             public void Gravar(Cliente cliente) {
12                 //inserção na base de dados
13             }
14             public void Excluir(Cliente cliente)
15             {
16                 //deleção na base de dados
17             }
18             public void Editar(Cliente cliente)
19             {
20                 //atualização na base de dados
21             }
22             public Cliente FindById(int Id)
23             {
24                 return null;
25                 //busca na base de dados
26             }
27         }
28     } ...

Quer ler esse conteúdo completo? Tenha acesso completo