VB .NET - Conceitos básicos : Entendendo e criando Componentes


Neste artigo vou escrever (novamente) um pouco sobre como criar componentes no Visual Basic .NET.

Componentes

Componentes são classes que são agrupadas para um propósito comum em uma livraria ou library.

Um Assembly .NET é um bloco de construção de aplicação e representa uma unidade básica de implantação, consistindo de tipos e recursos que trabalham em conjunto.
Podemos visualizar informações de um projeto assembly da seguinte forma.

- Abra o projeto no Visual Basic 2010 Express Edition;
- Na janela Solution Explorer clique em My Project;
- A seguir clique na aba Application;
- Finalmente clique no botão : Assembly Information...

Na figura ao lado temos as informações do assembly
para um projeto chamado Reparos;

Em sua forma mais simples, um assembly consiste de um arquivo .dll que contém as seguintes partes:

- Assembly Manifest - Contém informações sobre o conteúdo do próprio assembly;
- Tipo MedataData - Contém informação sobre os tipos de dados definidos no assembly;
- código MSIL - O resultado da compilação do código-fonte do aplicativo;
- Resources - Representam recursos como bitmaps, ícones, strings, etc...

Um componente (também conhecido como uma biblioteca de classe) é um conjunto de classes relacionadas que pertencem a uma assembly único e foram compilados e armazenados de modo que eles estão facilmente disponíveis para outras aplicações.

A maioria das empresas que escrevem software tendem a reciclar uma grande parte do seu código em várias aplicações. O mesmo é verdadeiro para os consultores de informática, que adaptam e personalizam a mesmo aplicação de software para vários clientes.

Em tais situações, não faria sentido inserir cópias duplicadas do código-fonte em cada aplicação. Imagine o que aconteceria se um bug for encontrado ? Cada cópia do código-fonte teria que ser examinado, corrigido, e recompilado novamente. Seria um absurdo !!!!

A principal vantagem de usar um componente é que ele torna mais fácil reutilizar código existente existentes. Esta vantagem se torna ainda mais importante quando um componente contém uma regra de negócio complexa. Se o componente é depurado completamente, não há necessidade de escrever e depurar o mesmo código em todas as aplicações que precisa da mesma funcionalidade. Ao longo do tempo, quando o novas características e modificações são adicionados ao componente, uma nova versão é distribuída a todas aplicações que o utilizam.

Podemos dividir os componentes em duas classes gerais:

  1. Componentes de interface de usuário : São parecidos com os controles Visual Basic e são conhecidos como Custom Controls;
  2. Componentes de código : Como componentes encontrado na camada de acesso a dados ou camada de negócios;

Dentro do escopo deste artigo eu vou abordar a criação e utilização de um componente de código.

Criando e usando um Componente no Visual Basic

Tanto o Visual Studio como as versões Express possuem suporte aos componentes e podemos criar um componente como um projeto e então referenciar o componente em outras aplicações. Para fazer isso geralmente seguimos os seguintes passos:

Um componente é compilado pelo Visual Studio ou VB em um arquivo DLL (nome do arquivo com extensão .DLL ). Este arquivo, também conhecido como uma biblioteca de vínculo dinâmico,pode ser usado por qualquer aplicação. NET.

Um componente tem um número de versão (tal como 1.2.0) associado a ele, que é muito útil quando ele for modificado no futuro. O desenvolvedor do componente incrementa o número de versão (primeiro dígito) ou o número de versão secundária (segundo dígito) ou o número da liberação de serviços(terceiro dígito).

Dessa forma dado um número da versão atual como 1.2.0, por exemplo, o número da nova versão poderia ser 2.1.0, 1.3.0, ou 1.2.1, dependendo da importância da liberação. Com o tempo, alguns clientes podem ter múltiplas versões do arquivo DLL no seu computador, para que possam verificar o número de versão de cada arquivo para encontrar qual desejam usar.

Criando um componente e referenciando-o em outra aplicação

Na parte prática vamos criar um projeto Class Library que será usada como uma DLL de acesso a dados. Para não complicar muito vamos definir apenas um método em nosso componente.

A seguir vamos criar uma aplicação Windows Forms que referencia este componente e utiliza os seus recursos.

Na criação do nosso componente vamos usar os recursos da ADO .NET e criar uma classe genérica para acessar vários banco de dados usando a classe DbProviderFactory.

O nosso componente fornecerá dois métodos: GetConexao e GetDataAdapter.

Estes dois métodos irão ler a informação a partir do usuário e com base no tipo de ligação e outras informações fornecidas pelo usuário eles vão criar e retornar a saída desejada. A definição dos métodos é a seguinte:

GetConexao IDbConnection público (int connType, string connString)
público IDbDataAdapter GetDataAdapter (int connType, string connString, string sql)


Observe que ao invés de retornar um objeto conexão relacionado a um provedor de dados ele retorna um IDbConnection. Assim criar objetos SqlConnection ou OleDbConnection (poderiamos ter implementado também para OdbcConnection) depende do tipo de argumento fornecido na conexão pelo usuário em tempo de execução.

Abra o Visual Basic 2010 Express Edition ou o Visual Studio e crie um novo projeto do tipo Class Library chamado AcessoGenerico;

Ao salvar o projeto informe como nome da solução : AcessoGenericoLibrary

Agora vamos renomear a classe Class1.vb criada por padrão para ConexaoDB.vb e incluir o seguinte código nesta classe:

mports System.Data
Imports System.Data.Common
Imports System.Data.OleDb
Imports System.Data.SqlClient
Public Class ConexaoDB
    Private idbConn As IDbConnection = Nothing
    Private idbAdapter As IDbDataAdapter = Nothing
    Public Sub New()
    End Sub
    'retorna um IDbConnection 
    Public Function GetConexao(ByVal connType As Integer, ByVal connString As String) As IDbConnection
        Try
            Select Case connType
                Case 1 ' OleDb Data Provider
                    idbConn = New OleDbConnection(connString)
                Case 2 ' Sql Data Provider
                    idbConn = New SqlConnection(connString)
                Case Else
            End Select
            Return idbConn
        Catch ex As Exception
            Throw ex
        End Try
    End Function '
    'retorna um IDbDataAdapter
    Public Function GetDataAdapter(ByVal connType As Integer, ByVal connString As String, ByVal sql As String) As IDbDataAdapter
        Try
            Select Case connType
                Case 1 ' OleDb Data Provider
                    idbAdapter = New OleDbDataAdapter(sql, connString)
                Case 2 ' Sql Data Provider
                    idbAdapter = New SqlDataAdapter(sql, connString)
                Case Else
            End Select
            Return idbAdapter
        Catch ex As Exception
            Throw
        End Try
    End Function
End Class

Usamos o namespace System.Data.SqlClient para acessar o SQL Server e o namespace System.Data.Oledb para acessar o MS Access.

Neste ponto você pode compilar o seu projeto e gerar o arquivo AcessoGenerico.dll que já esta pronto para ser usado em qualquer outro projeto.

Vamos lá...

Consumindo a livraria criada

Para simplificar vamos um projeto Window Forms Application nesta mesma solução para referenciar e usar a biblioteca criada.

No menu File-> Add -> New Project selecione o template Windows Forms Application e informe o nome AcessoDados;

No formulário padrão form1.vb inclua os seguintes componentes:

Conforme o leiaute da figura abaixo:

Agora vamos incluir a referência a nossa library criada. Para isso clique com o botão direito sobre o nome do projeto Windows Forms e selecione Add Reference;

Em seguida selecione na guia Projects o projeto AcessoGenerico que já criamos e clique em OK;

Agora declare as seguintes variáveis no formulário form1.

Private connString, sql As String
Dim conn As IDbConnection = Nothing
Dim adapter As IDbDataAdapter = Nothing

No evento Click do botão de comando - Conectar - inclua o código abaixo:

Private Sub btnConexaoBD_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConexaoBD.Click
        Dim accGen As New AcessoGenerico.ConexaoDB
        sql = "SELECT * FROM Employees"
        Try
            If rdbAccess.Checked Then
                connString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\dados\Northwind.mdb"
                conn = accGen.GetConexao(1, connString)
                adapter = accGen.GetDataAdapter(1, connString, sql)
            ElseIf rdbSQLServer.Checked Then
                connString = "Data Source=.\SQLEXPRESS;Initial Catalog=Northwind;Trusted_Connection=True;"
                conn = accGen.GetConexao(2, connString)
                adapter = accGen.GetDataAdapter(2, connString, sql)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
            Return
        End Try

        Try
            'abra a conexao
            conn.Open()
            ' preenche o DataSet
            Dim ds As New DataSet
            adapter.Fill(ds)
            'exibe os dados no datagridiview
            dgvDados.DataSource = ds.Tables(0).DefaultView
        Catch exp As Exception
            MessageBox.Show(exp.Message)
        Finally
            'fecha a conexao se estiver aberta
            If conn.State = ConnectionState.Open Then
                conn.Close()
            End If
        End Try
    End Sub

O código é trivial, nele estamos criando uma instância da nossa classe ConexaoDB e usando os métodos GetConexao e GetDataAdapter para realizar a conexão com o banco de dados selecionado pelo usuário;

Para simplificar estamos acessando a tabela Employees do banco de dados Northwind tanto no SQL Server como no MS Access;

O resultado final será idêntico conforme mostra a figura a seguir:

Pegue o projeto completo aqui: AcessoGenericoLibrary.zip

João 2:23 Ora, estando ele em Jerusalém pela festa da páscoa, muitos, vendo os sinais que fazia, creram no seu nome.
João 2:24
Mas o próprio Jesus não confiava a eles, porque os conhecia a todos,

João 2:25
e não necessitava de que alguém lhe desse testemunho do homem, pois bem sabia o que havia no homem.

Referências:


José Carlos Macoratti