Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Confira uma forma bem resumida de como criar uma aplicação ASP .NET em 3 camadas usando a linguagem C#. Acompanhe cada etapa e deixe suas impressões ao final do artigo.
O significa criar uma aplicação em camadas?
Quando acessa a página do seu banco na internet, você está usando uma aplicação que possui uma tela de apresentação, na qual o usuário recebe e entra com as informações.
Com esse exemplo bem simples, podemos perceber que temos três partes distintas atuando:
A figura abaixo procura mostrar de forma resumida esses três componentes, identificando e nomeando cada um deles.
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37300.gif&key=b3f014f042701a672ac495baa394567c08b0517cecfa85191b020c7ae88f6850" alt="37300.gif" />
Podemos identificar as seguintes camadas:
Embora para o cliente tudo seja apenas uma única aplicação, para o desenvolvedor criar uma aplicação em camadas significa desenvolver separadamente cada um dos componentes identificados no exemplo acima de forma a facilitar a manutenção e a ganhar produtividade.
Chama-se a isso uma aplicação com arquitetura em três camadas. Lembrando que podemos ter aplicações em n-camadas. Resumindo:
A arquitetura em três camadas é uma arquitetura cliente servidor na qual a interface do usuário, os processos de negócios e o armazenamento de dados são desenvolvidos e mantidos em módulos independentes, ou em plataforma separadas.
Basicamente existem três camadas:
Cada camada pode ser desenvolvida e testada separadamente. Para a nossa aplicação ASP .NET, podemos resumir a arquitetura em três camadas da seguinte forma:
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37301.gif&key=52692e624302faf25859e0cc8cc2d5fde5d1d83af158636d1c39ed8521eead1b" alt="37301.gif" />
Criando a aplicação ASP .NET em três camadas
-
Definindo o banco de dados, a tabela e a stored procedure
Em nosso exemplo, iremos criar uma aplicação ASP .NET para gerenciar as informações de clientes existentes na tabela Clientes do banco de dados Macoratti.mdf do SQL Server. O script para gerar o banco de dados Macoratti.mdf e a tabela Clientes é apresentado abaixo:
CREATE DATABASE [Macoratti] ON PRIMARY
( NAME = N'Macoratti', FILENAME = N'c:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATAMacoratti.mdf' , SIZE = 3072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'Macoratti_log', FILENAME = N'c:Program FilesMicrosoft SQL ServerMSSQL10.SQLEXPRESSMSSQLDATAMacoratti_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO
USE [Macoratti]
GO
CREATE TABLE [dbo].Clientes NOT NULL,
[nome] nvarchar NULL,
[nvarchar NULL,](mailto:)
[[nascimento] [date] NULL,](mailto:)
[CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED](mailto:)
[[id] ASC](mailto:)
[)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]](mailto:)
[) ON [PRIMARY]](mailto:)
GOSe você desejar incluir dados na tabelaClientesusando o SQL Server Management Studio, pode usar o seguinte script:
[INSERT INTO [Macoratti].[dbo].[Clientes]](mailto:)
[([nome]](mailto:)
[,[nascimento])](mailto:)
GOEmVALUES, inclua os dados que deseja incluir. O banco de dadosMacoratti.mdffoi criado no SQL Server Management Studio e nele também foi criado uma stored procedure chamadaGetClientes, conforme mostra a figura abaixo:
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37303.gif&key=b56bb7f95f9bab5d836027c8cace849ecb56a202811190969d91e613f3317a43" alt="37303.gif" />
Essa stored procedureGetClientesoferece acesso à tabelaClientese retorna todos os registros da tabela.
Vamos usar o Visual Web Developer 2010 Express Edition para criar o nosso site. No menuFile, clique emNew Web Sitee a seguir selecione a linguagem Visual C#, o templateASP .NET Empty Web Site, informe o nomeASPNET_3Camadase clique no botãoOK.
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37305.gif&key=4527980a872239c86bf2b55c7845f2dc0e2a838f049a344678ac80410788f54e" alt="37305.gif" />
-
Criando o projeto no Visual Web Developer Express
Na janelaSolution Explorer, você poderá ver a estrutura do projeto contendo apenas o arquivoweb.config. Vamos incluir umaMaster Pageno projeto. No menuWebSite, selecioneAdd New Iteme a seguir selecione o templateMaster Page, informe o nomeSite.mastere clique no botãoAdd.
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37313.gif&key=5b7b16257eeca201e747978606587969389d27d2e63bb7fb56f644b247e7f6f4" alt="37313.gif" />
Após incluir aMaster Page,vamos incluir nela uma tabela com 3 linhas e 1 coluna a partir do menuTable->Insert Table, definindo na página o seguinte layout:
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37317.jpg&key=91892ebc861d2930c808dff49a72c49de6242ce5a01198ea7fc7d316389b913e" alt="37317.jpg" />
-
Definindo as Classes do projeto
Vamos agora definir três classes em nosso projeto:
-
Configuração:classe responsável por obter a string de conexão e o nome do provedor usado.
-
AcessoDados:classe que contém os métodos para acesso aos dados.
-
Cliente:classe que irá chamar os métodos da classe AcessoDados.
Vamos criar uma nova pasta no projeto chamadaApp_Codepara conter essas três classes.
A pastaApp_Codeé uma pasta especial na qual você pode armazenar seu código-fonte e ele será compilado automaticamente em tempo de execução.O assembly resultante está acessível a todos os outros códigos no aplicativo da Web. Dessa forma, a pastaApp_Codefunciona como a pasta Bin, exceto pela possibilidade de armazenar código-fonte nela em vez de código compilado.
A pastaApp_Codee seu status especial em um aplicativo ASP.NET tornam possível criar classes personalizadas e outros arquivos que contém somente código-fonte e usá-los em seu aplicativo da Web sem ter que compilá-los independentemente.
A pastaApp_Codepode conter quantos arquivos e sub-pastas quanto você precisar. Você pode organizar seu código-fonte de qualquer forma que você achar conveniente.
No menuWebSite, clique emAdd ASP .NET Foldere selecioneApp_Code:
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37331.gif&key=82fb707a9b4786ebf15c21222a09c5b2a63e0bc3fa7dc6af4d7e3b06f737470f" alt="37331.gif" />
Criando a classe Configuracao.cs
Vamos agora criar a classeConfiguracao.csna pastaApp_Code. Clique com o botão direito do mouse sobre a pastaApp_Codee selecioneAdd New Item. Selecione o templateClass, informe o nomeConfiguracao.cse clique no botãoAdd. Em seguida, digite o código abaixo na classeConfiguracao.cs:
public static class Configuracao
private static string dbConnectionString;
private static string dbProviderName;
[dbConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;](mailto:)
[dbProviderName = ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;](mailto:)
public static string DbConnectionString
get { return dbConnectionString; }
public static string DbProviderName
get { return dbProviderName; }
}Nesse código, estamos usando o namespaceSystem.Configuration, pois vamos obter a string de conexão e o nome do provedor a partir do arquivo de configuraçãoWeb.Config.
Vamos então abrir o arquivoWeb.Confige incluir na seçãoconnectionStringsa string de conexão para acesso ao banco de dadosMacoratti, além do nome do provedor conforme abaixo:
[](mailto:)
[](mailto:)
[](mailto:)
Criando a classe AcessoDados.cs
Clique com o botão direito do mouse sobre a pastaApp_Codee selecioneAdd New Item. Selecione o templateClass, informe o nomeAcessoDadaos.cse clique no botãoAdd.Em seguida, digite o código abaixo na classeAcessoDados.cs:
public static class AcessoDados
public static DbCommand CreateCommand()
string dbProviderName = Configuracao.DbProviderName;
string dbConnectionString = Configuracao.DbConnectionString;
DbProviderFactory factory = DbProviderFactories.GetFactory(dbProviderName);
DbConnection connection = factory.CreateConnection();
connection.ConnectionString = dbConnectionString;
DbCommand command = connection.CreateCommand();
command.CommandType = CommandType.StoredProcedure;
public static DataTable ExecuteReader(DbCommand command)
DbDataReader reader = command.ExecuteReader();
{ command.Connection.Close(); }
public static int ExecuteNoneQuery(DbCommand command)
linhasAfetadas = command.ExecuteNonQuery();
{ command.Connection.Close(); }
public static string ExecuteScalar(DbCommand command)
valor = command.ExecuteScalar().ToString();
{ command.Connection.Close(); }
}Nessa classe, definimos 4 métodos para acessar os dados:
O métodoCreateCommand()é do tipoDbCommande cria um novo comando usando uma fábrica de provedores, além de utilizar o nome do provedor e a string de conexão para criar um comando para o provedor definido no arquivo Web.Config.O novo modelo de provedor disponível a partir da ADO.NET 2.0 está baseado em um série de classes base no namespaceSystem.Data.Comom. A classeDBProviderFactoriespermite a realização de dois tipos de tarefas:
-
Obter uma lista de todos os provedores existentes via método estáticoGetFactoryClasses
-
Criar uma instância de um determinado Factory conforme o seu tipo via métodoGetFactoryClass
Uma classe base de provedor é um objeto factory, que é usado para criar um conjunto de objetos relacionados comoSqlConnectioneSqlCommand. Eles retornam um tipo de classe abstrata do tipoDBConnection.
As classes deprovider factorysão derivadas de uma classe base abstrata:System.Data.Common.DbProviderFactory. Para cada tipo de base de dados a ser acessado, temos uma nova classe derivada dessa classe base abstrata. A classeDbDataProviderdefine o número de funções que essa subclasse precisa implementar:
CreateComand() Cria um objeto Command derivado de DBCommand. CreateCommandBuilder() Cria um objeto derivado de DbCommandBuilder CreateConnection() Cria um objeto derivado de DbConnection. CreateConnectionStringBuilder() Cria um objeto derivado de DbConnectionStringBuilder CreateDataAdapter() Cria um objeto derivado de DbDataAdapter. CreateDataSourceEnumerator() Cria um objeto derivado de DbDataSourceEnumerator. CreateParameter() Cria um objeto derivado de DbParameter. CreatePermission() Cria um objeto derivado de CodeAccessPermission, Funções DbDataProviderDesde que oDbProviderFactoryapropriado foi criado, a função na tabela acima pode ser usada para criar o objeto apropriado em vez de usar o operadorNewcomo anteriormente. Para determinar todas as classesDbProviderFactorydisponíveis e criar suas classes adicionais, é fornecida a classeSystem.Data.Common.DbProviderFactories.
Cada provedor de dados faz o registro de uma classeProviderFactoryno arquivomachine.configda plataforma .NET. A classe baseDbProviderFactorye a classeProviderFactoriespodem retornar umDataTablede informações sobre os diferentes provedores registrados no arquivomachine.config.Eles podem recuperar aProviderFactoryconforme a sequência do provedor fornecida ou umDataRowde umDataTable.
- [ExecuteReader: retorna um DataTable usando para instruções SELECT com objetivo de obter os dados retornado por consultas SQL usando SELECT](mailto:)
[O método](mailto:)[ExecuteReader](mailto:)[possui um parâmetro](mailto:)[DbCommand](mailto:)[. Esse comando irá obter um](mailto:)[DataTable](mailto:)[resultado da consulta SELECT. O](mailto:)[DbDataReader](mailto:)[irá ler todos os dados a partir das tabelas e finalmente o comando irá retornar o resultado como um](mailto:)[DataTable](mailto:)[.](mailto:)
- [ExecuteNonQuery: usado para instruções INSERT, UPDATE, DELETE. Neste caso, não teremos dados retornados apenas as linhas(registros) que foram afetadas](mailto:)
- [ExecuteScalar: usado para obter somente o primeiro dado retornado pela consulta SELECT](mailto:)
Clique com o botão direito do mouse sobre a pastaApp_Codee selecioneAdd New Item. Selecione o templateClass, informe o nomeCliente.cse clique no botãoAdd. Em seguida, digite o código abaixo na classeCliente.cs:
public static DataTable GetClients()
DbCommand command = AcessoDados.CreateCommand();
command.CommandText = "GetClientes";
return AcessoDados.ExecuteReader(command);
}Nesse código, criamos um comando para usar a stored procedureGetClientes,criada no banco de dadosMacoratti.mdf. A seguir, executamos o métodoExecuteReaderda classeAcessoDadosque retornar umDataTablecom os dados dos clientes.
Definindo a camada de apresentação
Vamos incluir no projeto um novoWeb Formspara exibir as informações da tabelaClientesusando as classes que criamos nos tópicos anteriores. No menuWebSite, clique emAdd New Iteme a seguir selecione o templateWeb Form. Informe o nomeListaClientes.aspx, marque a opçãoSelect master pagee clique no botãoAdd.
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37333.gif&key=5f6aacdabee6310f26f83dde1862f49b5672f44ad3429113fd0eb5e83330e661" alt="37333.gif" />
A seguir, selecione amaster pageSite.master e clique em OK.
/applications/core/interface/imageproxy/imageproxy.php?img=http://conteudo.imasters.com.br/21147/37335.gif&key=459c3761d46e5a232b1f40ec847046ba532cc16d814fa37c3879a5a9b8b7c82f" alt="37335.gif" />
Em seguida, na páginaListaClientes.aspx, inclua um controleGridViewalterando seu ID paragdvClientes. A seguir, abra o arquivoListaClientes.aspx.cse defina o código abaixo no eventoLoadda página:
public partial class _Default : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
gdvClientes.DataSource = Cliente.GetClientes();
}Pegue oprojeto completo Versão C#e compartilhe seus experimentos em três camadas.
://imasters.com.br/artigo/21147/dotnet/criando-uma-aplicacao-asp-net-em-tres-camadas
Carregando comentários...