ASP .NET - Criando uma camada de acesso a dados com LINQ to SQL


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 complexidade da aplicação.

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 destes padrões é separar o acesso a dados da lógica de negócios e da camada de apresentação.  Este padrão consiste em separar em camadas o código cuja responsabilidade é acessar dados do código que rege as regras de negócio do código responsável pela apresentação das informações da aplicação.

Podemos fazer esta 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; isto 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:

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.

1- 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, 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: Porque 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.

2- 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:

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.

3- Mapeando o banco de dados Servicos para uma classe de contexto de dados SQL

Vamos iniciar realizando o mapeando 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á aberto  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á criado 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 representa o banco de dados e a classe Tarefa que representa a tabela do banco de dados expressas como entidades do nosso negócio.

Se você abrir o arquivo Web.Config vai perceber que 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...

Referências:


José Carlos Macoratti