ASP.NET - Trabalhando em Camadas e com Data Sources


Já que eu estou tratando do assunto da programação em camadas no VB.NET (ver artigo : VB.NET - Aplicação de acesso a dados em 3 camadas - parte 1.) resolvi também mostrar como você pode trabalhar com classes e em camadas no ASP.NET usando o novo Visual Web Developer da Microsoft.(Se não tem ainda , pegue aqui -> http://msdn.microsoft.com/vstudio/express/vwd/)

Nosso objetivo será preencher um controle DropDownlist em uma página Web com os nomes das categorias da tabela Categories do banco de dados Northwind.mdb. O projeto será composto pela camada de dados , as regras de negócio e a interface com o usuário.

Nota: Estou usando o namespace System.Data.OleDb mas poderíamos usar qualquer namespace disponível para acesso a dados como System.Data.SqlClient. Neste caso o acesso teria que ser uma fonte de dados SQL Server e a string de conexão seria diferente.

1- Abra o VWD e crie um novo Web Site no Menu File -> New Web Site. Informe um nome sugestivo para o site. Que tal Camadas ?. Pois foi o nome que eu usei no projeto deste artigo. Neste momento você terá no seu projeto o arquivo Default.aspx , o arquivo web.config e o diretório de dados, conforme figura ao lado.

 

 

 

 

2- Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add New Item. A figura abaixo será apresentada com diversos templates(modelos). Selecione o modelo Class,  e informe o nome do arquivo como AcessoBD.vb

 

 

Camada de Dados - Criando a classe AcessoBD

 

Agora você deve digitar o código que esta exibido abaixo. Este será o conteúdo do arquivo AcessoBD.vb  e será responsável pelo acesso aos dados.

 

Nota: Ao salvar o arquivo AcessoBD.vb o VWD irá emitir um aviso informando que os arquivos serão armazenados na pasta app_Code. Simplesmente aceite esta orientação.

 

Imports System.Data
Imports System.Data.OleDb
Namespace acessoDados
    Public Class AcessoBD

        Private strConexao As String

        Public Sub New()
            MyBase.New()
            strConexao = ""
        End Sub

        Public Sub New(ByVal Conexao As String)
            MyBase.New()
            strConexao = Conexao
        End Sub
 
        Public Property Conexao() As String
            Get
                Return strConexao
            End Get
            Set(ByVal valorStringConexao As String)
                strConexao = valorStringConexao
            End Set
        End Property
 
        Public Function obterCategorias() As DataView
            'define objetos : dataset,connection,command e dataadatper
            Dim ds As DataSet
            Dim cn As OleDbConnection
            Dim cmd As OleDbCommand
            Dim da As OleDbDataAdapter

            'cria um objeto dataadapter
            da = New OleDbDataAdapter
            da.TableMappings.Add("Table", "Categories")

            cn = New OleDbConnection(strConexao)
            'abre a conexao
            cn.Open()
            'carrega os dados da tabela categorias
            cmd = New OleDbCommand("Select CategoryID, CategoryName from Categories", cn)
            cmd.CommandType = CommandType.Text
            'declaracao SQL para seleionar dados de uma fonte de dados
            da.SelectCommand = cmd

            'preenche o dataset com os dados e define o nome da tabela como categorias
            ds = New DataSet("Categorias")
            da.Fill(ds)
            'retorna um objeto dataview default para o datatable
            Return ds.Tables(0).DefaultView
        End Function
    End Class
End Namespace

 

Como funciona :

 

- A classe possui a seguinte estrutura:

Nota:  Nos construtores usamos a palavra-chave MyBase. MyBase é usado para referir-se aos membros da classe base.

 

- Usamos a declaração de um namespace chamado acessoDados para facilitar a referência a classe AcessoBD .Usaremos uma declaração Imports na classe definida no arquivo Negocio.vb para ter acesso a classe.

 

 

Camada de Negócio - Criando a classe Negocio

 

3- Clique com o botão direito do mouse sobre o nome do projeto e selecione a opção Add New Item. A mesma figura do item anterior será apresentada com diversos templates(modelos). Selecione o modelo Class,  e informe o nome do arquivo como Negocio.vb

 

Agora você deve digitar o código que esta exibido abaixo. Este será o conteúdo do arquivo Negocio.vb  e será responsável pelo acesso aos dados.

 

Imports System.Data
Imports System.Data.OleDb
Imports acessoDados

Namespace regraNegocio

    Public Class Negocio

        'define a variável Dados como sendo do tipo AcessoBD 
        'pertencente ao namespace acessoDados
        Private dados As AcessoBD

        Public Sub New()
            dados = New AcessoBD("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\Northwind.mdb")
        End Sub
        Public Function obtemCategorias() As DataView
            Return dados.obterCategorias
        End Function
     End Class

End Namespace

 

A estrutura desta classe é bem simples:

 

Após criar as duas classes a estrutura do seu projeto deverá estar como na figura ao lado:
  • As duas classes na pasta App_Code
  • O arquivo Default.aspx na raiz do projeto

 

Camada de Interface - Criando a interface com o usuário

Vamos aproveitar o arquivo Default.aspx que foi criado por padrão no nosso projeto para criar a interface com o usuário. A mesma será muito simples para facilitar o entendimento do recurso usado neste artigo. (pra que complicar se podemos facilitar...)

Selecione o arquivo Default.aspx e mude para o modo Design no VWD. A seguir  inclua os controles DropDownlist e Button na página ASP.NET a partir da barra de ferramentas. O leiaute final deverá ser o da figura a seguir.

Neste momento irei usar um recurso que é novo no .NET Framework 2.0:  incluir um DataSource usando o controle ObjectDataSource. Através deste controle poderemos acessar os dados a partir das classes que criamos em nosso projeto.

Selecione o controle DropDownList e na guia Smart Tag clique na opção Choose Data Source...

Selecione a opção New Data Source e na janela - Data Source Configuration Wizard - selecione o ícone Object , pois iremos acessar os dados a partir dos objetos das classes que criamos no projeto. Aceite o nome padrão para especificar o ID da fonte de dados: ObjectDataSource1.  

Na janela a seguir vamos selecionar o objeto de negócios que vamos usar. Selecione a opção regraNegocio.Negocio conforme abaixo.

Agora vamos escolher o método a ser usado pelo nosso projeto. No nosso caso temos somente um método - obtemCategorias() - que retorna um DataView. Selecione este método conforme na figura abaixo:

Na última etapa você deverá informar o nome do campo que deverá ser exibido no DropDownList - CategoryName - e o nome do campo que deverá ser o valor da seleção desta opção - CategoryID.

Pronto. Após terminar toda esta configuração o resultado final exibido na janela do VWD deverá ser a seguinte :

Para testar clique no botão - Start Debugging - para levantar o servidor de desenvolvimento do VWD e exibir o resultado final do projeto:

Neste artigo utilizamos classes em nosso projeto WEB com páginas ASP.NET usando um arquitetura em camadas (bem simples , por sinal). Além disto usamos o novo recurso do VS.NET 2005 que é a utilização de data sources a partir de objetos via controle ObjectDataSource.( o botão de comando tem apenas função decorativa, mas você pode implementar um método da classe AcessoBD para obter os produtos a partir da categoria.)

Obs: Eu ja implementei o método nas classes AcessoBD e Negocio para obter os produtos a partir da categoria selecionada falta implementar. Pegue o código e divirta-se.

Pegue o código do projeto aqui : Camadas.zip

Aguardo você no próximo artigo ASP.NET.


José Carlos Macoratti