.NET

9 jan, 2013

VB .NET – 7 passos para criar uma aplicação em 3 camadas – Parte 01

Publicidade

O foco deste artigo é explicar como criar uma aplicação em três camadas usando o Visual Basic .NET (de novo). O modelo em três camadas, derivado do modelo em ‘n’ camadas, recebe esta denominação quando um sistema cliente-servidor é desenvolvido retirando-se a camada de negócio do lado do cliente. O desenvolvimento é mais demorado no início, se comparado com o modelo em duas camadas, pois é necessário dar suporte a uma maior quantidade de plataformas e ambientes diferentes. Em contrapartida, o retorno vem em forma de respostas mais rápidas nas requisições, excelente performance tanto em sistemas que rodam na Intranet ou Internet e mais controle no crescimento do sistema.

As três partes de um ambiente modelo três camadas são: camada de apresentação, camada de negócio e camada de dados. Deve funcionar de maneira que o software executado em cada camada possa ser substituído sem prejuízo para o sistema. De modo que atualizações e correções de defeitos podem ser feitas sem prejudicar as demais camadas. Por exemplo: alterações de interface podem ser realizadas sem o comprometimento das informações contidas no banco de dados. (Fonte: http://pt.wikipedia.org/wiki/Modelo_em_tr%C3%AAs_camadas)

A figura abaixo procura mostrar de forma resumida esses três componentes, identificando e nomeando cada um deles:

3cam1Podemos identificar as seguintes camadas:

  • Camada de Apresentação (Presentation Tier – UI);
  • Camada de Negócios (Business Logic Tier – BLL;)
  • Camada de Acesso a dados (Data Tier – DAL).

Obs: Na verdade, a nossa solução terá quatro camadas, mas a camada de transferência de dados (DTO) será considerada uma camada auxiliar onde iremos declarar as nossas classes POCO usadas para transferir informações sobre os objetos do nosso domínio.

A transferência de dados de objeto (DTO), é um padrão de projeto usado para transferir dados entre os subsistemas de aplicativos de software. Os DTOs são muitas vezes utilizados em conjunto com os objetos de acesso a dados para recuperar dados de um banco.

A diferença entre os objetos de transferência de dados e objetos de negócios ou objetos de acesso a dados é que um DTO não tem nenhum comportamento, exceto para armazenamento e recuperação de seus próprios dados (acessores e modificadores).

Na prática, vamos fazer uma implementação do padrão DAO (Data Access Object), que define que toda a lógica de acesso aos dados deve ser separada da lógica de apresentação e da do negócio (regras da aplicação). A implementação dos DAO’s é muito simples: para cada objeto DTO teremos um objeto DAO que será responsável por realizar todas as operações de persistência deste objeto na base de dados.

Existem diversas implementações do padrão DAO, mas em geral podemos relacionar algumas características desejáveis em uma implementação:

  • Todo o acesso aos dados deve ser feita através das classes DAO de forma a se ter o encapsulamento;
  • Cada instância da DAO é responsável por um objeto de domínio;
  • O DAO deve ser responsável pelas operações CRUD no domínio;
  • O DAO não deve ser responsável por transações , sessões ou conexões que devem ser tratados fora do DAO.

O principais benefícios deste padrão são:

  • Separação da lógica da persistência da lógica de negócios;
  • Facilidade na manutenção;
  • Redução da complexidade do código da regra de negócios;
  • Centralização de todo o acesso aos dados em uma camada separada.

Vamos dividir esta tarefa em sete etapas e explicar cada uma em detalhes de forma que mesmo quem está iniciando o seu aprendizado no assunto possa acompanhar e entender o que foi feito.

Antes de iniciar a nossa caminhada (serão somente sete passos), vamos declarar os apetrechos necessários para terminá-la com êxito:

Recursos necessários para iniciar a jornada:

  1. Visual Basic 2010 Express Edition;
  2. Um banco de dados Relacional : SQL Server 2008 Express, MySQL, Oracle, etc. (e até o MS Access);
  3. SQL Server Management Studio.

banco

Passo 01. Criando um banco de dados relacional e as tabelas usadas na aplicação

Vamos criar duas tabelas bem simples e um banco de dados no SQL Server 2008 Express Edition usando o SQL Server Management Studio. Como eu estou usando a versão na qual apliquei o pacote de localização você verá as mensagens, menus, etc, em português.

Abra o SQL Server Management Studio(SSMS) e faça o login no seu SQL Server Local (indicado como .SQLEXPRESS). Após abrir o SSMS, clique com o botão direito do mouse sobre o item Banco de dados e selecione Novo Banco de dados…

vbn_cam11

Na janela “Novo Banco de dados”, informe o nome Escola para o nome do banco de dados e clique no botão OK:

vbn_cam12

Após criar o banco de dados Escola, clique com o botão direito sobre ele e selecione Nova Tabela:

vbn_cam13

A seguir, defina os campos id e o nome nesta tabela – sendo que o campo id é uma chave primária e do tipo identity. O nome da tabela é Classe:

vbn_cam14

USE [Escola]
GO
CREATE TABLE [dbo].[Classe](
[id] [int] IDENTITY(1,1) NOT NULL,
[nome] [varchar](50) NULL,
CONSTRAINT [PK_Classe] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Acima temos a tabela Classe criada e abaixo o script para gerar a tabela na janela de consultas do SSMS.

Agora vamos repetir o procedimento e criar a tabela Alunos com os campos: id, nome e classeid, onde id é um campo chave primária do tipo identity:

vbn_cam15

USE [Escola]
CREATE TABLE [dbo].[Alunos](
[id] [int] IDENTITY(1,1) NOT NULL,
[nome] [nvarchar](50) NULL,
[classeid] [int] NULL,
CONSTRAINT [PK_Alunos] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

Acima temos a tabela Alunos criada e abaixo o script para gerar a tabela. Após criar as tabelas, vamos criar um diagrama das tabelas do banco de dados Escola e definir o relacionamento entre o campo id da tabela Classe e o campo classeid da tabela Alunos.

Na figura abaixo podemos notar que o relacionamento é do tipo um-para-muitos, no qual temos que uma classe pode conter muitos alunos:

vbn_cam16

Dessa forma, já temos o banco de dados Escola, as tabelas Classe e Alunos e o relacionamento entre as tabelas criados.

Obs: Podemos incluir alguns registros nas tabelas usando a instrução INSERT INTO na janela de Consultas do SSMS.

Tabela Classe:

INSERT INTO [Escola].[dbo].[Classe]
     ([nome])
     VALUES
     ('Análise Requisitos')
GO

Tabela Alunos:

INSERT INTO [Escola].[dbo].[Alunos]
     ([nome]
     ,[classeid])
     VALUES
     ('Macoratti',1)
GO

Passo 02. Criando a solução no Visual Basic 2010 Express Edition

No segundo passo, vamos criar um novo projeto usando o Visual Basic 2010 Express Edition. Vamos criar uma solução contendo três projetos e cada projeto representará uma camada da nossa aplicação. Assim teremos:

  1. Solução – AppTresCamadas;
  2. Projeto Windows Forms – Camada de Apresentação – CamadaWin;
  3. Projeto Class Library – Camada de Negócios – CamadaBLL;
  4. Projeto Class Library – Camda de Acesso aos Dados – CamadaDAL.

No menu File, clique em New Project e selecione o template Windows Forms Application informando o nome CamadaWin. Ainda no menu File, clique em Save All e na janela Save Project, informe o nome AppTresCamadas para o nome da solução e clique em Save.

vbn_cam17

Vamos agora incluir a camada de negócios. No menu File, clique em Add e, a seguir, em New Project e selecione o template Class Library informando o nome CamadaBLL e clicando em OK.

vbn_cam18

Agora vamos incluir a camada de acesso aos dados. No menu File, clique em Add e a seguir em New Project e selecione o template Class Library informando o nome CamadaDAL e clicando em OK.

Definindo a camada DTO

Finalmente, vamos incluir uma camada onde vamos definir as classes do nosso domínio. Essa camada será uma camada de transferência que deverá ser enxergada pelos demais projetos.

No menu File, clique em Add e a seguir em New Project e selecione o template Class Library informando o nome CamadaDTO e clicando em OK. Ao final desta etapa, na janela Solution Explorer, deveremos ter a estrutura conforme exibe a figura abaixo:

vbn_cam1d

Passo 03. Definindo as dependências e referências entre os projetos da solução

Neste passo temos que definir as dependências entre os quatro projetos criados na solução. Em nossa solução teremos as seguintes dependências:

  1. A camada de apresentação – projeto CamadaWin – deverá possuir uma dependência para o projeto CamadaBLL que é a nossa camada de negócios;
  2. A camada de negócios – projeto CamadaBLL – deverá possuir uma dependência para o projeto CamadaDAL que é nossa camada de acesso aos dados;
  3. A camada de transferência de dados – DTO – Data Transfer Object – que deverá ser visto pelos demais projetos.

Assim, teremos a seguinte hierarquia: CamadaWin (CamadaDTO) => CamadaBLL (CamadaDTO) => CamadaDAL => CamadaDTO. Dessa forma, a camada de apresentação deverá enxergar a camada de negócios, que por sua vez deverá enxergar a camada de acesso a dados.

Clique com o botão direito sobre o nome da solução e selecione Properties ou tecle ALT+ENTER. Na janela de propriedades selecione o item – Project Dependencies. A seguir, na combo Project, selecione o projeto CamadaWin e na janela Depends on: marque CamadaBLL e CamadaDTO:

vbn_cam1a

Repita o procedimento anterior selecionando na combo Project o projeto CamadaBLL e na janela Depends on: marque CamadaDAL e CamadaDTO:

vbn_cam1b

Repita o procedimento anterior selecionando na combo Project o projeto CamadaDAL e na janela Depends on: marque CamadaDTO:

vbn_cam1e

Para concluir esse passo, temos que definir o projeto que deverá ser executado quando a aplicação for iniciada.

Na nossa solução, queremos que o projeto Windows Forms (camada de apresentação) seja o projeto executado quando a solução inicie, então, nas janela de propriedades da solução clique no item Startup Project e selecione Single Startup project escolhendo o projeto CamadaWin e clicando no botão OK:

vbn_cam1c

Após definir estas dependências, temos que incluir as referências entre os projetos da nossa solução.

Na janela Solution Explorer clique com o botão direito do mouse sobre o projeto CamadaDAL e clique em Add Reference. A seguir, selecione a guia Projects e selecione o projeto CamadaDAL e o projeto CamadaDTO e clique em OK:

 

vbn_cam1f

Repita o procedimento acima para o projeto CamadaDAL referenciando o projeto CamadaDTO;

vbn_cam1g

Faça o mesmo para o projeto CamadaWin referenciando os projetos CamadaBLL e CamadaDTO:

vbn_cam1h

Vamos agora descansar um pouco da nossa caminhada, afinal demos três longos passos, e temos que recuperar as forças para prosseguir…

Aguarde os próximos passos na segunda parte do artigo!