Um padrão (se é que podemos chamar isso
de
padrão) que é muito usado para acessar dados em um Aplicação ASP
.NET
é incluir a lógica de acesso a dados diretamente nas páginas ASP .NET.
Isso faz
com que a camada de apresentação e a lógica de acesso a dados estejam
fortemente
acopladas, o que pode se tornar um problema para efetuar testes e dar
manutenção
na
aplicação dependendo da sua complexidade.
Neste artigo eu volto a falar novamente da
importância da separação da camada de acesso a dados da camada de
apresentação
em uma aplicação ASP .NET.
Quando você trabalha com dados em uma
aplicação ASP
.NET pode se beneficiar pela utilização de padrões de projeto comuns. Um
desses
padrões é separar o acesso a dados da lógica de negócios e da camada de
apresentação. Ele consiste em separar em camadas o código cuja
responsabilidade é acessar dados do código que regem as regras de negócio
do
código responsável pela apresentação das informações da aplicação.
Podemos fazer essa separação em uma
aplicação ASP
.NET de diversas formas, quer usando o modelo data
source, o qual inclui os
controles de servidor como os controles ObjectDataSource e LinqDataSource,
quer
usando o Data Access Aplication Blocks,
quer usando uma ferramenta para efetuar
o mapeamento objeto relacional etc.
A recomendação básica é separar a lógica de
acesso
a dados da camada da apresentação, onde a camada de acesso a dados pode
ser
implementada como uma classe separada no projeto da aplicação web.
Uma aplicação web orientada a dados
usualmente
inclui uma camada de acesso a dados, seja usando um dataset tipado ou
classes de
entidades que representam os dados. Temos também a camada com as regras
de
negócio, que realiza validações do negócio, e a camada de apresentação.
A camada de acesso a dados deve incluir
todo o
código que é específico ao acesso e à persistência dos dados; isso inclui o
código
que cria a conexão com o banco de dados e realiza as operações para
selecionar,
incluir, atualizar e excluir dados. A camada de acesso a dados contém
classes
que implementam métodos para acessar dados.
A camada de apresentação NUNCA deve tratar
diretamente com acesso a dados, mas deve invocar classes e métodos da
camada
responsável por esta tarefa: a camada de acesso a dados.
Criando uma
camada de
acesso a dados
Como exemplo eu vou mostrar como criar uma
camada
de acesso a dados usando os seguintes recursos:
- Visual Web Developer
2010 Express Edition –
Criar a aplicação Web; - SQL Server 2008 Express –
Criar o banco de dados
e a tabela; - LINQ to SQL – Criar a
camada de acesso a dados; - LinqDataSource – Fazer a
comunicação entre a
camada de apresentação e a camada de acesso a dados; - NET Framework 4.0 – A
versão da plataforma .NET
usada; - Windows 7 – O sistema
operacional usado.
Obs: Podemos criar o exemplo usando o
Visual Studio
2008 e o .NET Framework 3.5 e o banco de dados SQL Server 2005 também.
01. Criando a
aplicação Web
Abra o Visual
Web Developer 2010 Express Edition,
clique na opção Create – New Web Site e a seguir selecione a
linguagem de sua
preferência – no nosso caso, Visual Basic (claro) e o template ASP .NET
Empty Web
Site, informe o nome TarefasNetWeb (usando a opção File
System e a pasta onde
vai ser salva o projeto) e clique em OK.
Obs: Por que não usei o
template
ASP .Net Web site? O template ASP .Net Web site agora cria uma
estrutura
com diretórios e arquivos de script que não iremos usar na nossa
aplicação.
02. Criando o
banco de
dados e a tabela
A próxima tarefa é definir a nossa base de
dados. Vamos criar um banco de
dados novo chamado Servicos e uma tabela chamada Tarefas.
Na janela Solution Explorer
clique com o botão do
mouse sobre o nome do projeto e selecione Add New Item.
A seguir selecione o template SQL
Server DataBase e
informe o nome Servicos.mdf e clique no botão Add.
Uma janela de diálogo será apresentada
informando
que a pasta App_Data será criada para conter o banco de dados
criado, confirme.
Na janela Solution Explorer você
verá a pasta
App_Data e nela o banco Servicos.mdf criado.
Abra a janela DataBase Explorer e
clique com o
botão direito sobre o item Tables e selecione Add New Table.
A seguir defina a tabela Tarefas com a
estrutura
abaixo:
-
id – int –
identificador da tarefa; chave
primária do tipo Identity; -
nome –
nvarchar(100) – indica o nome da tarefa; -
data – datetime
– indica a data da criação da
tarefa; -
completa – bit :
indica se a tarefa foi
completada ou não;
Nesta etapa vamos usar o LINQ para
trabalhar com os
dados, pois ele aplica os princípios da orientação a objetos aos dados
relacionais, fornecendo um modelo unificado de programação para consulta e
atualização de dados de diferentes tipos de fonte de dados.
Vamos usar o LINQ to SQL Classes
como a camada de
acesso a dados da nossa aplicação e usar a janela Object Relational
Designer no
Visual Web Developer para gerar as classes
de entidades que representam os
nossos dados.
03. Mapeando o
banco de dados Servicos para uma classe
de contexto de dados SQL
Vamos iniciar realizando o mapeamento da
nossa tabela
para entidades usando o LINQ to SQL.
Clique com o botão direito do mouse sobre o
nome do
web site e selecione Add ASP .NET Folder -> App_Code.
A seguir clique com o botão direito sobre a
pasta
App_Code e selecione o template LINQ to SQL Classes
informando o nome
Tarefas.dbml
e clicando em Add.
Nesse momento será aberta a janela
Object
Relational Designer no Visual Web Developer;
A partir da janela DataBase Explorer
selecione a
tabela Tarefas e arraste-a e a solte na janela do Designer
conforme a figura
abaixo:
Serão criados na pasta App_Code os
arquivo Tarefas.dbm.layout
e Tarefas.designer.vb sob o arquivo Tarefas.dbml.
O arquivo Tarefas.designer.vb possui
as classes
TarefasDataContext, que representam o banco de dados, e a classe Tarefa,
que
representa a tabela do banco de dados expressa como entidades do nosso
negócio.
Se você abrir o arquivo Web.Config
vai perceber a string de conexão para o banco de dados Servicos conforme
abaixo:
<connectionStrings>
<add
name="ServicosConnectionString" connectionString="Data
Source=.\SQLEXPRESS; _
AttachDbFilename=|DataDirectory|\Servicos.mdf;Integrated
Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
Vamos agora incluir uma página
Web Form no web site.
Clique com o botão direito sobre o nome do web site e selecione
Add New Item.
A seguir selecione o template Web Form
e aceite o
nome Defaut.aspx e clique em Add.
Agora vamos incluir o componente LinqDataSource
a partir da ToolBox na página Default.aspx e clicar em Configure
Data
Source;
Na janela Choose a Context Object
selecione
o contexto TarefasDataContext e clique em Next>.
A seguir selecione a Tabela Tarefas e
clique
no botão Finish.
No componente LinqDataSource
marque as opções Enable Delete, Enable Insert,
Enable
Update.
Agora devemos incluir o
componente
GridView, onde iremos exibir os dados na página Default.aspx.
Em Choose Data Source
selecione o
objeto LinqDataSource1 que acabamos de definir e marque as opções
para
edição, paginação e seleção de dados.
Executando o projeto iremos obter
a
página Default.aspx exibindo os dados no controle GridView.
Até o próximo artigo ASP.NET…
Eu sei, é apenas ASP .NET e LINQ to SQL, mas
eu
gosto…