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:
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.
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);}
...