msdn16_capa.jpg

Clique aqui para ler todos os artigos desta edição

 

Utilizando Reflection no .NET Framework

por Leandro Carvalho

Este artigo discute

Este artigo usa as seguintes tecnologias:

·          Biblioteca Reflection do .NET Framework

·          Vínculo automático entre as camadas de dados, interface e negócio

C# e MS-Access

 

Download:

reflection.zip (175KB)

Chapéu

C#

 

 

 

Reflection é uma biblioteca do .NET Framework que disponibiliza para os desenvolvedores desmembrar as características (atributos, métodos, interface, campos e construtores) de um objeto através do seu tipo. Esta prática e cômoda biblioteca é a chave que oferece a possibilidade de implementarmos a codificação necessária para manter a persistência automática entre as camadas de dados (tabelas), de negócio (classes) e interface (formulários) em nossos sistemas.

 

Projeto de exemplo em três camadas

Há muito que os desenvolvedores vêm trabalhando uma forma para aumentar a produtividade e padronizar o processo de desenvolvimento de sistemas. Um bom exemplo é a utilização dos application blocks. Entretanto, algumas tarefas repetitivas continuam em nosso dia-a-dia de desenvolvimento de sistemas. Uma delas é o processo de capturar as informações que estão em um formulário, carregá-los nas classes de negócio e depois gravar/excluir/atualizar em um banco de dados. Feito isto, o processo inverso (dados para classes de negócios, classes de negócios para controles do formulário) deve ser implementado. Como este processo é encontrado facilmente em sistemas, então, porque não termos um código padrão que permita a simplificação desse processo?

Hoje o .NET Framework já disponibiliza uma série de recursos que já fazem este vínculo automático. Um deles é o uso de Databind, porém este recurso nos obriga a configurar campo-a-campo, atributo-a-atributo da aplicação. É em busca de uma forma mais simples e única, que possa ser utilizada por todos os aplicativos, é que iremos nos aventurar através da biblioteca de Reflection, onde mostrarei como será possível vincular os dados de uma tabela aos atributos de uma classe de negócio, e estes atributos, aos controles do formulário (Interface) e vice-versa.

Para isso, iremos criar uma classe de controle que fará este vínculo automático. Esta classe deverá ser herdada por todas as classes de negócio, evitando que o desenvolvedor tenha que se preocupar em escrever este vínculo campo-a-campo, atributo-a-atributo no código fonte.

Veja um exemplo de um cadastro de usuário onde utiliza-se o Reflection para aumentar a produtividade no desenvolvimento de sistemas.

Camada de Dados (Figura 1): tabela chamada Clientes com os seguintes campos:

 

image002.jpg

   Figura 1 - Estrutura da tabela de clientes

 

Camada de Negócio: será representada por uma classe chamada cliente (Figura 2 e
Listagem 1
). Seus atributos terão o mesmo nome e o tipo de dados dos campos da tabela. Isto se deve ao fato que o vínculo, entre a tabela e a classe de negócio, será feito de uma forma automática, através das funções encontradas na biblioteca de Reflection.

 

image003.gif

Figura 2: Estrutura da classe cliente.

 

Nesta classe teremos dois métodos básicos:

Ler – onde será possível ler os dados do banco e atribuí-los aos atributos da classe;

Gravar – onde será feita a inserção ou atualização dos atributos da classe para o banco de dados.

 

Além dos atributos, serão definidas duas constantes:

NomeDaTabela – Nome da tabela que representa o nosso objeto no banco de dados;

CampoPK – Nome da Chave primária na tabela.

 

Listagem 1 – código da classe Cliente

public class Cliente: Controle.BaseClass

{// VARIAVEIS INTERNAS

private int _ID_Cliente=0;

private string _Nome ="";

private System.DateTime _DT_Nascimento;

private string _UF="";

private string _Sexo="";

private bool _Ativo=false;

 

// PROPRIEDADE DA CLASSE INTERNAS

public int ID_Cliente

{

            get{return(this._ID_Cliente);}

            set{this._ID_Cliente = value;}

}

public string Nome

{

            get{return(this._Nome);}

            set{this._Nome = value;}

}

public System.DateTime DT_Nascimento

{

            get{return(this._DT_Nascimento);}

            set{this._DT_Nascimento = value;}

}

public string UF

{

            get{return(this._UF);}

...

Quer ler esse conteúdo completo? Tenha acesso completo