Desenvolvimento - ASP. NET

ASP.NET: ObjectDatasource - controle para acesso a banco de dados

Uma das (muitas) novidades na versão 2.0 é a possibilidade de usar controles do tipo "datasource", diretamente no webform, para poder configurar visualmente certos aspectos do acesso ao bancos de dados que antes requeriam várias linhas de código.

por Rodrigo Vieira



Parte 1: Introdução

A versão 2.0 da plataforma .Net apresenta uma série de novos controles para acesso a banco de dados, que de fato é um dos pontos fracos na versão 1.x, não pelas classes em si (ADO.Net é muito bom) mas pela quantidade de código ainda necessário para integrar controles como datagrid e repeater em uma arquitetura n-tier.

Uma das (muitas) novidades na versão 2.0 é a possibilidade de usar controles do tipo "datasource", diretamente no webform, para poder configurar visualmente certos aspectos do acesso ao bancos de dados que antes requeriam várias linhas de código. Na verdade tais controles são tão flexíveis que é possível até criar um gridview (que é uma espécie de "datagrid com esteróides") com capacidade de edição, deleção, paginação e ordenação de dados sem uma linha de código sequer!

Entre os diferentes tipos de controles datasource, existe o AcessDatasource, SQLDatasource, DatasetDatasource e ObjectDatasource. Os dois primeiros realizam acesso direto ao banco de dados, logo não são recomendados para arquiteturas em 3 ou mais camadas; por outro lado, devem ser bastante úteis para prototipação e para pequenas aplicações, que exijam pouca manutenção.

Já os controles DatasetDatasource e ObjectDatasource permitem uma integração poderosa com arquiteturas n-tier e todo tipo de coleções strong-typed, e por isso eu imagino que farão parte do "feijão com arroz" dos desenvolvedores ASP.net 2.0 no futuro.

Parte 2: Criando as classes-teste em uma arquitetura em 3 camadas.

Para testar o controle ObjectDatasource, criei duas classes, DB_Usario e ObjectFactory, que correspondem respectivamente às camadas de acesso ao banco de dados (DAL) e de regras de negócio (business rules) da minha aplicação. Por motivo de simplicidade a classe DB_Usuario apenas expõe as propriedades ID, Nome e Email, mas naturalmente tal classe também deveria apresentar os métodos para acesso ao banco de dados em si (Insert, Delete e Update), e possivelmente outros métodos auxiliares.

A nossa classe ObjectFactory, da camada intermediária, apresentará uma função "GetAllUsuarios" que retorna uma coleção com todos os usuários. No nosso exemplo a coleção é criada em memória mas naturalmente que em em uma aplicação real a mesma seria carregada a partir do banco de dados, utilizando alguma função correspondente na classe DB_Usuario. Essa função será usada pelo ObjectDataSource para buscar os dados, e finalmente o controle GridView apresentará tais dados na tela, sem necessidade de código extra.

Vamos então ao código:

DB_Usuario.vb

Public Class DB_Usuario
   Private m_ID As Integer
   Private m_nome As String
   Private m_email As String
   Public Property ID() As Integer
      Get 
         Return m_ID
      End Get
   
      Set(ByVal value As Integer)
          m_ID = value 
      End Set
   End Property
   Public Property Nome() As String
      Get
          Return m_nome
      End Get
      Set(ByVal value As String)
          m_nome = value
      End Set
   End Property
   Public Property Email() As String
      Get
         Return m_email
      End Get
      Set(ByVal value As String)
         m_email = value
      End Set
   End Property
End Class


ObjectFactory.vb

Public Class ObjectFactory
   "aqui sao criados 10 usuarios "dummy", mas no verdadeiro
   "código seria usado a classe DB_Usuario para buscar todos 
   "os usuarios no banco de dados...
   Public Function GetAllUsuarios() As ICollection
      Dim usuarios As New ArrayList
      For i As Integer = 1 To 10
          Dim u As New DB_Usuario
          u.ID = i
          u.Nome = "Usuario " & i.ToString
          u.Email = "usuario" & i.ToString & "@nowhere.com"
          usuarios.Add(u)
      Next
      Return usuarios
   End Function
End Class
Parte 3: Criando a página e mostrando os dados

Agora que já temos nossas classes de suporte, podemos criar um formulário e buscar esses dados através do ObjectDatasource. Nesse programa-teste estou usando a ferramenta Microsoft VisualWebDeveloper, versão Beta, que pode ser baixada livremente no site da Microsoft.

Primeiro, vamos adicionar o controle ObjectDatasource, arrastando-o da Toolbox para o formulário em modo design. Então basta clicar no comando "Configure DataSource...", que será apresentada a seguinte caixa de diálogo:

Basta selecionar a classe que queremos usar, nesse caso ObjectFactory, que então poderemos selecionar qual método será usado pelo ObjectDatasource para buscar os dados:

É só isso que precisamos configurar em nosso ObjectDatasource! Repare que também é possível mapear visualmente quais métodos são usados para as operações de alteração do BD.

Terminada a configuração de nosso ObjectDataSource, basta adicionar um GridView ao formulário, e ligá-los:

Nenhum código adicional é necessário. Se rodarmos a aplicação, teremos o seguinte resultado:

Com isso, nosso programa-teste está terminado. Tudo muito simples, e ao mesmo tempo profissional!

Boa sorte!!

Rodrigo Vieira

Rodrigo Vieira - MCSD e MCAD, formado em Ciência da Computacão, trabalhando há 5 anos em uma empresa de telecomunicacões em Oslo, Noruega, desenvolvendo aplicativos para Intranet nas plataformas .Net e Oracle. Entusiasta de Python, Mono, Linux e software livre em geral.
Blog The Spoke:
http://br.thespoke.net/MyBlog/rodviking/MyBlog.aspx