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:
Uma variável privada - strConexao - responsável por armazenar a string de conexão com a fonte de dados
Uma propriedade pública - Conexao - pela qual podemos obter e definir a string de conexão
Dois métodos construtores - Sub New() e Sub New(strConexao) (estes métodos serão executados somente quando a classe for instanciada)
O método - obterCategorias() - que retorna um DataView contendo as categorias selecionadas na tabela Categories.
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:
A classe possui uma variável privada - dados - do tipo AcessoBD que irá guardar a instância da classe AcessoBD
Um método construtor Sub New() que irá criar a instância da classe AcessoBD na variável dados passando a string de conexão com o banco de dados Northwind.mdb
Um método - obtemCategorias - que irá invocar o método da classe AcessoBD para selecionar as categorias da tabela Categories.
Após criar as duas classes a estrutura do
seu projeto deverá estar como na figura ao lado:
|
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