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