Upload
mdevide
View
77
Download
3
Embed Size (px)
Citation preview
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
1/34
VB .NET - 7 passos para criar uma aplicao em 3Camadas - Parte 1
O foco deste artigo explicar como criar uma aplicao em 3camadas usando o Visual Basic .NET.(de novo)
Modelo em trs camadas, derivado do modelo em n camadas,recebe esta denominao quando um sistema cliente-servidor desenvolvido retirando-se a camada de negcio do lado do cliente. Odesenvolvimento mais demorado no incio comparando-se com omodelo em duas camadas pois necessrio dar suporte a uma maiorquantidade de plataformas e ambientes diferentes. Emcontrapartida, o retorno vem em forma de respostas mais rpidasnas requisies, excelente performance tanto em sistemas querodam na intranet ou internet e mais controle no crescimento dosistema.
As trs partes de um ambiente modelo trs camadas so: camada deapresentao, camada de negcio e camada de dados.Devefuncionar de maneira que o software executado em cada camadapossa ser substitudo sem prejuzo para o sistema. De modo que
atualizaes e correes de defeitos podem ser feitas sem prejudicaras demais camadas. Por exemplo: alteraes de interface podem serrealizadas sem o comprometimento das informaes contidas nobanco de dados.(Fonte:http://pt.wikipedia.org/wiki/Modelo_em_tr%C3%AAs_camadas)
A figura abaixo procura mostrar de forma resumida esses 3componentes identificando e nomeando cada um deles;
Podemos identificar asseguintes camadas:
Camada deApresentao(PresentationTier - UI)
Camada deNegcios(Business LogicTier - BLL)
Camada deAcesso a dados
(Data Tier - DAL)
http://pt.wikipedia.org/wiki/Modelo_em_tr%25C3%25AAs_camadashttp://pt.wikipedia.org/wiki/Modelo_em_tr%25C3%25AAs_camadashttp://pt.wikipedia.org/wiki/Modelo_em_tr%25C3%25AAs_camadashttp://pt.wikipedia.org/wiki/Modelo_em_tr%25C3%25AAs_camadashttp://pt.wikipedia.org/wiki/Modelo_em_tr%25C3%25AAs_camadas5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
2/34
Obs: Na verdade a nossa soluo ter 4 camadas mas a camada de transferncia de dados(DTO) ser considerada uma camada auxiliar onde iremos declarar as nossas classes POCOusadas para transferir informaes sobre os objetos do nosso domnio.
A transferncia de dados de objeto (DTO), um padro de projeto
usado para transferir dados entre os subsistemas de aplicativos desoftware. Os DTOsso muitas vezes utilizados em conjunto com osobjetos de acesso a dados para recuperar dados de um banco dedados.
A diferena entre os objetos de transferncia de dados e objetos denegcios ou objetos de acesso a dados que um DTO no temnenhum comportamento, exceto para armazenamento e recuperaode seus prprios dados (acessores e modificadores)
Na prtica estaremos fazendo uma implementao do padro DAO(Data Access Object)que define que toda a lgica de acesso aosdados deve ser separada da lgica de apresentao e lgica donegcio (regras da aplicao). A implementao dos DAOs muitosimples, para cada objeto DTO teremos um objeto DAO que serresponsvel por realizar todas as operaes de persistncia desteobjeto na base de dados.
Existem diversas implementaes do padro DAOmas em geral podemosrelacionar algumas caractersticas desejveis em uma implementao do
padro DAO:
- Todo o acesso aos dados deve ser feita atravs das classes DAO de formaa se ter o encapsulamento;- Cada instncia da DAO responsvel por um objeto de domnio;- O DAO deve ser responsvel pelas operaes CRUD no domnio;- O DAO no deve ser responsvel por transaes , sesses ou conexesque devem ser tratados fora do DAO;
O principais benefcios deste padro so:
Separao da lgica da persistncia da lgica de negcios; Facilidade na manuteno; Reduo da complexidade do cdigo da regra de negcios; Centralizao de todo o acesso aos dados em uma camada
separada;
Vamos dividir esta tarefa em 7 etapas e explicar cada uma emdetalhes de forma que mesmo quem esta iniciando o seu aprendizadono assunto possa acompanhar e entender o que foi feito.
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
3/34
Antes de iniciar a nossa caminhada (sero somente 7 passos)vamosdeclarar os apetrechos necessrios para termin-la com xito :
Recursos necessrios para iniciar ajornada:
1. Visual Basic 2010 Express Edition2. Um banco de dados Relacional :SQL Server 2008
Express,MySQL,Oracle, etc. (e at o MS Access)3. SQL Server Management Studio
Passo 1 - Criando um banco de dadosrelacional e as tabelas usadas na aplicao
Vamos criar duas tabelas bem simples e um banco de dados no SQL Server
2008 Express Editionusando o SQL Server Management Studio.
Nota: Veja o artigo : Usando o SQL Server Management Studio -Macoratti.net
Como eu estou usando a verso na qual apliquei o pacote de localizao vocver as mensagens, menus, etc em portugus.
Abra o SQL Server Management Studio(SSMS)e faa o login no seu SQL ServerLocal (indicado como .\SQLEXPRESS);
Aps abrir o SSMSclique com o boto direito do mouse sobre o item Banco dedados e selecione Novo Banco de dados...
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/expresshttp://www.microsoft.com/visualstudio/en-us/products/2010-editions/expresshttp://www.microsoft.com/pt-br/download/details.aspx?id=1695http://www.microsoft.com/pt-br/download/details.aspx?id=1695http://www.microsoft.com/pt-br/download/details.aspx?id=1695http://www.microsoft.com/pt-br/download/details.aspx?id=1695http://dev.mysql.com/downloads/http://dev.mysql.com/downloads/http://www.oracle.com/technetwork/products/express-edition/downloads/index.htmlhttp://www.oracle.com/technetwork/products/express-edition/downloads/index.htmlhttp://www.microsoft.com/pt-br/download/details.aspx?id=7593http://www.microsoft.com/pt-br/download/details.aspx?id=7593http://www.macoratti.net/vbn_ssms.htmhttp://www.macoratti.net/vbn_ssms.htmhttp://www.macoratti.net/vbn_ssms.htmhttp://www.macoratti.net/vbn_ssms.htmhttp://www.macoratti.net/vbn_ssms.htmhttp://www.microsoft.com/pt-br/download/details.aspx?id=7593http://www.oracle.com/technetwork/products/express-edition/downloads/index.htmlhttp://dev.mysql.com/downloads/http://www.microsoft.com/pt-br/download/details.aspx?id=1695http://www.microsoft.com/pt-br/download/details.aspx?id=1695http://www.microsoft.com/visualstudio/en-us/products/2010-editions/express5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
4/34
Na janela -Novo Banco de dados- informe o nome Escolapara o nome dobanco de dados e clique no boto OK;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
5/34
Aps criar o banco de dados Escolaclique com o boto direito sobre ele eselecione Nova Tabela...
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
6/34
A seguir defina os campos id e nome nesta tabela sendo que o campo id
uma chave primria e do tipo identity. O nome da tabela Classe;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
7/34
USE [Escola]GO
CREATE TABLE[dbo].[Classe]([id] [int]IDENTITY(1,1) NOTNULL,[nome] [varchar](50)NULL,CONSTRAINT[PK_Classe] PRIMARYKEY CLUSTERED([id] ASC)WITH (PAD_INDEX =OFF,STATISTICS_NORECOMPUTE = OFF) ON[PRIMARY]) ON [PRIMARY]GO
Acima temos a tabela Classecriada e ao lado o script para gerar a tabela na
janela de consultas do SSMS.
Agora vamos repetir o procedimento e criar a tabela Alunoscom oscampos: id, nome e classeid, onde id um campo chave primria dotipo identity:
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
8/34
USE [Escola]CREATE TABLE[dbo].[Alunos]([id] [int]IDENTITY(1,1) NOTNULL,[nome][nvarchar](50) NULL,[classeid] [int] NULL,CONSTRAINT[PK_Alunos] PRIMARYKEY CLUSTERED([id] ASC)WITH (PAD_INDEX =
OFF,STATISTICS_NORECOMPUTE = OFF) ON[PRIMARY]) ON [PRIMARY]
GO
Acima temos a tabela Alunoscriada e ao lado o script para gerar a tabela:
Aps criar as tabelas vamos criar um diagrama das tabelas do banco dedados Escolae definir o relacionamento entre o campo id da tabela Classee ocampo classeidda tabela Alunos;
Na figura abaixo podemos notar que o relacionamento do tipoum-para-muitosonde temos que uma classe pode conter muitos alunos:
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
9/34
Dessa forma j temos o banco de dados Escola , as tabelas Classe e Alunose orelacionamento entre as tabelas criados.
Obs: Podemos incluir alguns registros nas tabelas usando a instruoINSERT INTO na janela de Consultas do SSMS.
INSERT INTO [Escola].[dbo].[Classe]([nome])VALUES('Anlise Requisitos')
GO
INSERT INTO [Escola].[dbo].[Alunos]([nome],[classeid])VALUES('Macoratti',1)
GOTabela Classe Tabela Alunos
Vamos ao segundo passo...
Nota: Dvidas com SQL ??? Veja o curso :Curso de SQL . -Macoratti.nete aSeo SQL do Site Macoratti.net
Passo 2 - Criando a soluo no VisualBasic 2010 Express Edition
No segundo passo vamos criar um novo projeto usando oVisual Basic 2010Express Edition.
Vamos criar uma soluo contendo 3 projetos onde cada projeto representaruma camada da nossa aplicao. Assim teremos:
1. Soluo - AppTresCamadas2. Projeto Windows Forms - Camada de Apresentao - CamadaWin3. Projeto Class Library - Camada de Negcios - CamadaBLL4. Projeto Class Library - Camda de Acesso aos Dados - CamadaDAL
No menu Fileclique em New Project e selecione o template Windows FormsApplicationinformando o nome CamadaWin;
No menu Fileclique emSave All e na janela Save Project informe onome AppTresCamadaspara o nome da soluo e clique em Save;
http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.macoratti.net/pageview.aspx?catid=25http://www.macoratti.net/pageview.aspx?catid=25http://www.macoratti.net/pageview.aspx?catid=25http://www.macoratti.net/pageview.aspx?catid=25http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJghttp://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&ved=0CCUQFjAB&url=http%3A%2F%2Fwww.macoratti.net%2Fcursosql.htm&ei=IDyNULfkAuTJ0AH4roHgAQ&usg=AFQjCNEMLbAGj09-t4BwgLdtLbaixFzwJg5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
10/34
Vamos agora incluir a camada de negcios:
No menu Fileclique em Adde a seguir em New Project e selecione otemplate Class Libraryinformando o nome CamadaBLLe clicandoem OK;
Agora vamos incluir a camada de acesso aos dados:
No menu Fileclique em Adde a seguir emNew Projecte selecione o
template Class Libraryinformando o nome CamadaDALe clicandoem OK;
Definindo a camada DTO.
Finalmente vamos incluir uma camada onde vamos definir as classesdo nosso domnio. Essa camada ser uma camada de transfernciaque dever ser enxergada pelos demais projetos.
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
11/34
No menu Fileclique em Adde a seguir em New Project e selecione otemplate Class Libraryinformando o nome CamadaDTOe clicandoem OK;
Ao final desta etapa na janela Solution Explorer deveremos ter aestrutura conforme exibe a figura abaixo:
Passo 3 - Definindo as dependncias ereferncias entre os projetos da soluo
Neste passo temos que definir as dependncias entre os 4 projetoscriados na soluo.
Em nossa soluo teremos as seguintes dependncias:
1. A camada de apresentao - projeto CamadaWin- deverpossuir uma dependncia para o projeto CamadaBLLque anossa camada de negcios;
2. A camada de negcios - projeto CamadaBLL- dever possuiruma dependncia para o projeto CamadaDALque nossacamada de acesso aos dados;
3. A camada de transferncia de dados - DTO - Data TransferObject - que dever ser visto pelos demais projetos;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
12/34
Assim teremos a seguinte hierarquia:CamadaWin (CamadaDTO) =>CamadaBLL (CamadaDTO) => CamadaDAL => CamadaDTO
Dessa forma a camada de apresentao dever enxergar a camada denegcios que por sua vez dever enxergar a camada de acesso adados.
Clique com o boto direito sobre o nome da soluo eselecione Propertiesou tecle ALT+ENTER;
Na janela de propriedades selecione o item -Project Dependencies ;
A seguir na comboProjectselecione o projeto CamadaWine najanela Depends on: marque CamadaBLL e CamadaDTO:
Repita o procedimento anterior selecionando na combo Projectoprojeto CamadaBLLe na janelaDepends on: marque CamadaDAL eCamadaDTO:
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
13/34
Repita o procedimento anterior selecionando na combo Projectoprojeto CamadaDALe na janelaDepends on: marque CamadaDTO:
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
14/34
Para concluir esse passo temos definir o projeto que dever serexecutado quando a aplicao for iniciada.
Na nossa soluo queremos que o projeto Windows Forms (camada deapresentao)seja o projeto executado quando a soluo inicie:
Nas janela de propriedades da soluo clique no item StartupProjecte selecione Single Startup projectescolhendo oprojeto CamadaWine clicando no boto OK:
Aps definir estas dependncias temos que incluir as refernciasentre os projetos da nossa soluo.
Na janela Solution Explorer clique com o boto direito do mousesobre o projeto CamadaDALe clique em Add Reference;
A seguir selecione a guia Projectse selecione oprojeto CamadaDALe o projeto CamadaDTOe clique em OK;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
15/34
Repita o procedimento acima para oprojeto CamadaDALreferenciando o projeto CamadaDTO;
Faa o mesmo para o projeto CamadaWinreferenciando osprojetos CamadaBLLe CamadaDTO:
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
16/34
Vamos agora descansar um pouco da nossa caminhada, afinal demos 3longos passos, e temos que recuperar as foras para prosseguir...
Naprimeira parte deste artigodemos os primeiros passos em nossacaminhada cujo objetivo criar uma aplicao em camadas usando oVB .NET.
Iremos agora iniciar a definio de cada uma das camadas da nossa
aplicao comeando pela camada DTOque deve estar acessvel atodas as camadas da soluo e funciona como uma camada detransferncia de objetos entre as demais camadas.
Passo 4 - Definindo as classes do nosso
domnio na camada DTO - Data Transfer Object
No nosso modelo de desenvolvimento estamos partindo do banco de dados,onde j definimos as tabelas Classe e Alunos, e agora deveremos criar asclasses que representam o nosso domnio.
Nosso modelo nos leva a criar as entidadesClasse e Alunoque so classes quedevero representar as tabelasClasse e Alunos.
Vamos ento definir as classes e nestas classes vamos definir os membros querepresentam os campos das respectivas tabelas.
1- Criando a classe Classe no projeto CamadaDTO
http://www.macoratti.net/12/10/vbn_cam1.htmhttp://www.macoratti.net/12/10/vbn_cam1.htmhttp://www.macoratti.net/12/10/vbn_cam1.htmhttp://www.macoratti.net/12/10/vbn_cam1.htm5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
17/34
Clique com o boto direito do mouse sobre o projeto CamadaDTOeselecioneAdd->Class;
Selecione o template Classe informe o nomeClasse.vbe clique noboto Add;
A seguir vamos definir o cdigo abaixo nesta classe:
Public Class ClassePrivate _id As IntegerPrivate _nome As StringPrivate _acao As BytePublic Property ClasseId()
As StringGet
Return _idEnd GetSet(ByVal value As
String)_id = value
End SetEnd PropertyPublic Property
NomeClasse() As StringGet
Return _nome
End GetSet(ByVal value As
String)_nome = value
End SetEnd PropertyPublic Property Acao() As
ByteGet
Return _acaoEnd Get
Set(ByVal value AsByte)
_acao = valueEnd Set
End PropertyEnd Class
A classe Classe possui os membros _id , _nome e_acaoeas propriedades:
- ClasseID- NomeClasse- Acao
Onde ClasseIDrepresenta o campo id da tabela Classe e apropriedadeNomeClasserepresenta o campo nome da tabela Classe
A propriedade Acaorepresenta a ao que pretendemosrealizar na tabela eque poder ser: inserir, atualizar, deletar e sem ao
A propriedade Acao foi definida na classe apenas paramostrar que podemosdefinir outras propriedades alm daquelas querepresentam os campos da tabela.
2- Criando a classe Aluno no projeto CamadaDTO
Clique com o boto direito do mouse sobre o projeto CamadaDTOe
selecione Add->Class;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
18/34
Selecione o template Classe informe o nome Aluno.vbe clique no boto Add;
A seguir vamos definir o cdigo abaixo nesta classe:
Public Class Aluno
Private _id As IntegerPrivate _nome As StringPrivate _classeid As
IntegerPrivate _acao As BytePublic Property AlunoId()
As IntegerGet
Return _idEnd GetSet(ByVal value As
Integer)_id = value
End SetEnd PropertyPublic Property
NomeAluno() As StringGet
Return _nomeEnd GetSet(ByVal value As
String)_nome = value
End SetEnd PropertyPublic Property ClasseId
As IntegerGet
Return _classeidEnd GetSet(ByVal value As
Integer)_classeid = value
End SetEnd PropertyPublic Property Acao() As
ByteGet
Return _acaoEnd GetSet(ByVal value As
Byte)_acao = value
End SetEnd Property
End Class
A classe Aluno possui os membros_id , _nome, classeid e_acaoe as propriedades:
- AlunoID- NomeAluno- ClasseId- Acao
Onde AlunoIDrepresenta o campo id da tabela Aluno, apropriedadeNomeAlunorepresenta o campo nome da tabela Aluno e ocampo ClasseIdrepresentao campo classeidda tabela Aluno que uma chave estrangeira.
A propriedade Acaorepresenta a ao que pretendemos realizarna tabela eque poder ser: inserir, atualizar, deletar e sem ao
A propriedade Acaofoi definida na classe apenas para mostrar
que podemosdefinir outras propriedades alm daquelas que representam oscampos da tabela.
Obs: Estou usando a sintaxe antiga para definir as propriedades.A nova sintaxe simplificae facilita a leitura do cdigo. Ex: Para a classe Aluno o cdigoficaria assim:
Public Property AlunoId As IntegerPublic Property NomeAluno As StringPublic Property ClasseId as Integer
Public Property Acao as Byte
A camada DTO tem como responsabilidade a transferncia dasinformaes sobre os objetos Classe e Alunoentre as demaiscamadas. Lembrando que um DTO no tem nenhum comportamento,exceto para armazenamento e recuperao de seus prprios dados(acessores e modificadores).
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
19/34
Passo 5 - Definindo a camada de acessoa dados - CamadaDAL
A camada de acesso a dados responsvel pelo acesso e apersistncia dos dados e nesta camada vamos definir as classes quecontm os mtodos genricos para acessar e persistir dados e asclasses especficas relacionadas com as classes do nosso domnio.Assim teremos as seguintes classes nesta camada:
AcessoDados- Classe genrica que contm os mtodos paraacesso e persistncia de dados;
ClasseDAL- Classe contm os mtodos para acesso epersistncia das informaes sobre a entidade Classe;
AlunosDAL- Classe contm os mtodos para acesso epersistncia das informaes sobre a entidade Aluno;
Alm destas classes a camada de acesso a dados dever possuirtambm um arquivo de configurao app.Configonde iremosarmazenar a string de conexo e um mdulo
chamadoGlobalDAL.vbque conter uma enumerao definindo asaes que poderemos fazer em nossas entidades.
1- Criando o arquivo de configurao app.config
Clique com o boto direito do mouse sobre o projeto CamadaDALeselecione Add -> New Item;
A seguir selecione o template Application Configuration Fileeaceite o nome app.confige clique em Add;
A seguir defina neste arquivo entre as tags atag contendo a string de conexo com o nossobanco de dados Escolaconforme abaixo:
.......
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
20/34
2- Criando o mdulo GlobalDAL.vb
Clique com o boto direito do mouse sobre o projeto CamadaDALeselecione Add -> Module;
A seguir selecione o template Modulee informe onome GlobalDAL.vb;
A seguir defina neste arquivo o seguinte cdigo:
Module GlobalDALPublic Enum FlagAcao
Insert = 1Update = 2Delete = 3NoAction = 0
End EnumEnd Module3- Criando as classes AcessoDados, AlunosDAL e ClasseDAL
a- Criando a classe genrica AcessoDados (SQLHelp)
Clique com o boto direito do mouse sobre o projeto CamadaDALeselecione Add -> Class;
A seguir selecione o template Classe informe onome AcessoDados.vb;
A seguir defina neste arquivo o seguinte cdigo:
Imports System.ConfigurationImports System.Data.SqlClient
Public Class AcessoDados
Dim conn As SqlConnection
Dim cmd As SqlCommandDim isTran As BooleanPrivate trans As SqlTransactionDim connStr As String
Public Shared Function GetConnectionString(ByValstrConnection As String) As String
Dim retorno As New String("")If Not String.IsNullOrEmpty(strConnection) Then
Tryretorno =
ConfigurationManager.ConnectionStrings(strConnection).ConnectionString
Catch ex As ExceptionMsgBox(ex.Message)
Nesta classe temos definidosos seguintes mtodos:
GetConnectionString- obtm a string deconexo do arquivo
app.config; Connect- Abre uma
conexo com o bancode dados SQL Server;
CloseConn- fecha aconexo aberta;
ExecuteQuery-Executa um comandoSQL e retorna umboleano;
ExecuteAndGetReader- Executa umcomando SQL eretorna umSqlDataReader;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
21/34
End TryElse
retorno =ConfigurationManager.ConnectionStrings("ConexaoSQLServer").ConnectionString
End If
Return retornoEnd Function
Private Function Connect() As BooleanDim connstr As StringDim bln As Boolean'TryIf conn Is Nothing Then
connstr = GetConnectionString("ConexaoSQLServer")If connstr String.Empty Then
bln = Trueconn = New SqlConnection(connstr)
Else
bln = FalseEnd If
End IfIf conn.State = ConnectionState.Closed Then
Tryconn.Open()
Catch ex As ExceptionMsgBox(ex.Message)
End TryEnd IfReturn bln
End Function
Public Sub CloseConn()If Not conn Is Nothing Then
If Not conn.State = ConnectionState.Closed Thenconn.Close()
End IfEnd If
End Sub
Public Function ExecuteQuery(ByVal strCmdTxt As String) AsBoolean
Dim intRows As Integer
If conn.State = ConnectionState.Closed ThenConnect()End If
cmd = New SqlCommandcmd.Connection = conncmd.CommandText = strCmdTxtcmd.CommandType = CommandType.Text
If Not isTran ThenintRows = cmd.ExecuteNonQuery()conn.Close()
Else
cmd.Transaction = transintRows = cmd.ExecuteNonQuery()
Sub New()(Construtor) - Oconstrutor da classe;chama o mtodoConnect;
BeginTransaction-Inicia uma transao;
CommitTransaction-Faz um commit natransao;
RollBackTransaction- Cancela atransao;
Os mtodos definidos nestaclasse so de uso geral esero usados para acessar obanco de dados
SQL Server e realizar apersistncia dos dados;
Procurei manter este arquivoo mais simples possvel masele pode ser melhorado comoutras opes.
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
22/34
End IfIf intRows > 0 Then
ExecuteQuery = TrueElse
ExecuteQuery = FalseEnd If
End Function
Public Function ExecuteAndGetReader(ByVal strCmdTxt AsString) As SqlDataReader
If conn.State = ConnectionState.Closed ThenConnect()
End If
cmd = New SqlCommandcmd.Connection = conncmd.CommandText = strCmdTxtcmd.CommandType = CommandType.Text
If Not isTran ThenExecuteAndGetReader = cmd.ExecuteReader
Elsecmd.Transaction = transExecuteAndGetReader = cmd.ExecuteReader
End IfEnd Function
Public Sub New()If Not Connect() Then
Exit SubEnd If
End SubPublic Sub BeginTransaction()
If isTran Then ReturnIf conn.State = ConnectionState.Closed Then
conn.Open()End Iftrans = conn.BeginTransaction()isTran = True
End SubPublic Sub CommitTransaction()
If Not isTran Then Returntrans.Commit()conn.Close()
trans = NothingisTran = FalseEnd SubPublic Sub RollBackTransaction()
If Not isTran Then Returntrans.Rollback()conn.Close()trans = NothingisTran = False
End SubEnd Class
b- Criando a classe AlunosDAL com mtodos especficos acessar epersitir dados de um objeto do tipo Aluno
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
23/34
Clique com o boto direito do mouse sobre o projeto CamadaDALeselecione Add -> Class;
A seguir selecione o template Classe informe o nome AlunosDAL.vb;
A seguir defina neste arquivo o seguinte cdigo:
Imports System.Data.SqlClientImports CamadaDTOImports System.Collections.Generic
Public Class AlunosDALPublic Function DeletaAlunoPorId(ByVal _alunoId As Integer) As Boolean
Dim strSql As StringDim objDB As AcessoDadosstrSql ="Delete from Alunos where id=" & _alunoIdobjDB = New AcessoDadosobjDB.ExecuteQuery(strSql)Return True
End Function
Public Function GetAlunos() As List(Of Aluno)Dim objdb As New AcessoDadosDim strSql As String = ""
strSql ="Select * from Alunos"Dim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)Dim lista As New List(Of Aluno)While dr.Read
Dim alu As Aluno = New Aluno
alu.ClasseId = IIf(IsDBNull(dr("classeid")), 0, dr("classeid"))alu.AlunoId = IIf(IsDBNull(dr("id")), 0, dr("id"))alu.NomeAluno = IIf(IsDBNull(dr("nome")), "", dr("nome"))lista.Add(alu)
End Whiledr.Close()Return lista
End Function
Public Function GetAlunoPorId(ByVal alunoid As Integer) As AlunoDim objdb As New AcessoDadosDim strSql As String = ""Dim alu As Aluno = Nothing
strSql = "Select * from Alunos where id= " & alunoidDim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)While dr.Read
alu = New Alunoalu.ClasseId = IIf(IsDBNull(dr("classeid")), 0, dr("classeid"))alu.AlunoId = IIf(IsDBNull(dr("id")), 0, dr("id"))alu.NomeAluno = IIf(IsDBNull(dr("nome")), "", dr("nome"))
End Whiledr.Close()Return alu
End Function
Public Function GetAlunosPorClasse(ByVal classeid As Integer) As List(Of Aluno)Dim objdb As New AcessoDadosDim strSql As String = ""
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
24/34
strSql = "Select * from Alunos where classeid= " & classeidDim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)Dim lista As New List(Of Aluno)Dim alu As Aluno = NothingWhile dr.Read
alu = New Aluno
alu.ClasseId = IIf(IsDBNull(dr("classeid")), 0, dr("classeid"))alu.AlunoId = IIf(IsDBNull(dr("id")), 0, dr("id"))alu.NomeAluno = IIf(IsDBNull(dr("nome")), "", dr("nome"))lista.Add(alu)
End Whiledr.Close()Return lista
End Function
Public Function SalvaAluno(ByVal _aluno As Aluno) As BooleanDim strsql As String = ""Dim objDB As New AcessoDadosIf _aluno.Acao = FlagAcao.Insert Then
strsql ="Insert into Alunos (nome,classeid) " & "values( '" &
_aluno.NomeAluno.Trim() & "', " & _aluno.ClasseId & ")"ElseIf _aluno.Acao = FlagAcao.Update Then
strsql = "Update Alunos set" & "nome='" & _aluno.NomeAluno & "'," &
" classeid=" & _aluno.ClasseId & "' " & " where id=" & _aluno.AlunoId End IfobjDB.ExecuteQuery(strsql)Return True
End FunctionEnd ClassNesta classe criamos os mtodos:
DeletaAlunoPorId- exclui um aluno da tabela GetAlunos- Obtm todos os alunos GetAlunoPorId- Obtm um aluno pelo seu cdigo GetAlunosPorClasse- Obtm os alunos de uma classe SalvaAluno- Salva os dados de um aluno
c- Criando a classe ClasseDAL com mtodos especficos acessar epersitir dados de um objeto do tipo Classe
Clique com o boto direito do mouse sobre o projeto CamadaDALeselecione Add -> Class;
A seguir selecione o template Classe informe o nome ClasseDAL.vb;
A seguir defina neste arquivo o seguinte cdigo:
Imports System.Data.SqlClientImports CamadaDTOImports System.Collections.Generic
Public Class ClasseDAL
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
25/34
Public Function DeletaClasse(ByVal ClasseID As Integer) As BooleanDim strSql As StringDim objdb As New AcessoDadosTry
strSql = "Delete from Alunos where id= " & ClasseIDobjdb.ExecuteQuery(strSql)
objdb = New AcessoDadosstrSql = "Delete from Classe where id= " & ClasseIDobjdb.ExecuteQuery(strSql)
Catch ex As ExceptionThrow New Exception
End TryReturn True
End Function
Public Function GetClasses() As List(Of Classe)Dim strSql As StringDim objdb As New AcessoDadosDim lista As New List(Of Classe)strSql ="Select * from Classe"Dim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)While dr.Read
Dim cls As Classe = New Classecls.ClasseId = IIf(IsDBNull(dr("id")), 0, dr("id"))cls.NomeClasse = IIf(IsDBNull(dr("nome")), "", dr("nome"))lista.Add(cls)
End Whiledr.Close()Return lista
End Function
Public Function GetClassePorId(ByVal Id As Integer) As ClasseDim strSql As StringDim objdb As New AcessoDadosDim cls As Classe = NothingstrSql = "Select * from Classe where id= " & IdDim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)Dim arr As New ArrayListWhile dr.Read
cls = New Classecls.ClasseId = IIf(IsDBNull(dr("id")), 0, dr("id"))cls.NomeClasse = IIf(IsDBNull(dr("nome")), "", dr("nome"))
End Whiledr.Close()
Return clsEnd Function
Public Function Salva(ByVal cls As Classe) As BooleanDim strsql As String = String.EmptyDim objDB As New AcessoDadosIf cls.Acao = FlagAcao.Insert Then
strsql ="Insert into Classe (nome) values( '" & cls.NomeClasse.Trim()
& "')"ElseIf cls.Acao = FlagAcao.Update Then
strsql = "Update Classe set nome='" & cls.NomeClasse.Trim() & "'" & "
where id=" & cls.ClasseIdElse
Return FalseEnd If
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
26/34
TryobjDB.ExecuteQuery(strsql)
Catch ex As ExceptionThrow New Exception
End TryReturn True
End FunctionEnd ClassNesta classe criamos os mtodos:
DeletaClasse- Deleta uma classe GetClasses- Obtm todas a classes GetClassePorId- Obtm uma classe pelo seu cdigo Salva- Salva os dados de uma classe
Nos mtodos das classes AlunosDAL e ClasseDALestamos usandoinstrues SQL como texto no cdigo. Uma melhor opo seria autilizao de stored procedurespor serem mais seguras e maisrpidas.
Nasegunda parte deste artigoiniciamos a definio das camadas danossa soluo iniciando com a camada DTOe a camada de acesso adados. Continuando a nossa caminhada cujo objetivo criar umaaplicao em camadas usando o VB .NET.
Iremos agora continuar a definio das camadas da nossa aplicaodesta vez abordando a camada de negcios - CamadaBLL- que responsvel pelas regras de negcio do nosso domnio e onde iremosefetuar as validaes.
O objetivo da camada de negcios implementar a lgica daaplicao, expondo esta lgica para a camada de apresentao eoutras aplicaes, e tambm acessar a camada de acesso a dados.
Passo 6 - Definindo as classes do nossodomnio na camada de negcio - CamadaBLL
Como ja escrevi nosso modelo muito simples e estamos usando o padroDAO para implementar as funcionalidades da nossa soluo. Nada muitosofisticado mas funcional seguindo o padro KISS - Keept Simple Stupid.(um princpio que defende que toda a complicao desnecessriadeve ser evitada. Ento se o jeito simples o certo, por que
http://www.macoratti.net/12/11/vbn_cam2.htmhttp://www.macoratti.net/12/11/vbn_cam2.htmhttp://www.macoratti.net/12/11/vbn_cam2.htmhttp://www.macoratti.net/12/11/vbn_cam2.htm5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
27/34
complicamos ? Por pura falta de competncia e preguia.Simples no sinnimo de fcil.)
Seguindo este padro vamos agora criar as classes da camada de negcio -CamadaBLL- onde para cada classe do nosso domnio teremos uma classe de
negcio relacionada.
Vamos ento definir as classes e nestas classes vamos definir os mtodos queacessam a camada de acesso a dados. Eu no estou realizando nenhumavalidao nesta camada para deixar o exemplo mais limpo e fcil de entendermas qualquer validao de negcio dever ser feita nesta camada.
1- Criando a classe ClasseBLL
Clique com o boto direito do mouse sobre o projeto CamadaBLLe
selecioneAdd->Class;
Selecione o template Classe informe o nomeClasseBLL.vbe clique noboto Add;
A seguir vamos definir o cdigo abaixo nesta classe:
Imports CamadaDTOImports CamadaDALPublic Class ClasseBLL
Public Function GetTodasClasses() As List(OfClasse)
Dim db As New ClasseDALReturn db.GetClasses()
End FunctionPublic Function GetClassePorCodigo(ByVal
_CodigoClasse As Integer) As ClasseDim db As New ClasseDALReturn db.GetClassePorId(_CodigoClasse)
End FunctionPublic Function Salvar(ByVal cls As Classe)
Dim db As New ClasseDALReturn db.Salva(cls)
End FunctionPublic Function DeletarClasse(ByVal
_CodigoClasse As Integer)Dim db As New ClasseDALReturn db.DeletaClasse(_CodigoClasse)
End FunctionEnd Class
A classe ClasseBLL possui os mtodos:
GetTodasClasses GetClassePorCodigo Salvar DeletarClasse
Esta classe esta apenas usando os mtodoscriados paraacessar os mtodos correspondentes nacamada CamadaDAL
2- Criando a classe AlunosBLL
Clique com o boto direito do mouse sobre o projeto CamadaBLLeselecione Add->Class;
Selecione o template Classe informe o nome AlunosBLL.vbe clique noboto Add;
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
28/34
A seguir vamos definir o cdigo abaixo nesta classe:
Imports CamadaDTOImports CamadaDALPublic Class AlunosBLL
Public Function GetTodosAlunos() As List(OfAluno)
Dim db As New AlunosDALReturn db.GetAlunos
End FunctionPublic Function GetAlunosPorCodigo(ByVal
_alunoId As Integer) As AlunoDim db As New AlunosDALReturn db.GetAlunoPorId(_alunoId)
End FunctionPublic Function GetAlunosPorClasse(ByVal
_classeId As Integer)Dim db As New AlunosDAL
Return db.GetAlunosPorClasse(_classeId)End FunctionPublic Function SalvaAluno(ByVal _aluno As
Aluno)Dim db As New AlunosDALReturn db.SalvaAluno(_aluno)
End FunctionPublic Function DeletaAluno(ByVal _alunoId
As Integer)Dim db As New AlunosDALReturn db.DeletaAlunoPorId(_alunoId)
End FunctionEnd Class
A classe AlunosBLL possui os mtodos:
GetTodosAlunos GetAlunosPorCodigo GetAlunosPorClasse SalvaAluno DeletaAluno
Esta classe esta apenas usando os mtodoscriados paraacessar os mtodos correspondentes nacamada CamadaDAL
As duas classes definidas nesta camada atuam da mesma formacriando uma instncia da camada de acesso a dados e usando omtodo definido para realizao da operao.
As validaes de negcio devem ser realizadas nesta camada. Issono esta sendo feito neste exemplo pela simplicidade do projeto.
Passo 7 - Definindo a camada deapresentao - CamadaWin
Vamos agora definir a camada de apresentao onde criaremos umprojetoWindows Formspara permitir que o usurio gerencie asclasses e os alunos realizando as seguintes operaes:
Cadastrar Classe Alterar Classe
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
29/34
Cadastrar AlunoMeu objetivo ser mostrar que na camada de apresentaodeveremos tratar apenas da apresentao e tratamento dasinformaes pois a lgica do negcio e a persistncia dos dados estoem camadas separadas. Dessa forma a camada de apresentao nodeve saber nada sobre lgica de negcios nem sobre persistncia dedados.
A camada de apresentao para atualizar as informaes ir usar osservios da camada de acesso aos dados via camada de negcios,realizando nesta as validaes pertinentes.
No formulrio form1.vb que foi criado por padro vamos definir o
leiaute conforme mostra a figura abaixo:
Controles principais doformulrio:
GroupBox - grpNovaClasse-Text = Classes
CboClasses txtNovaClasse btnNovaClasse btnSalvarClasse
GroupBox - grpAlunos- Text= Alunos
dgvAlunos txtNovoAluno bntSair btnSalvarAluno
ErrorProvider -ErrorProvider1
Vamos declarar a utilizao dos namespaces
Imports CamadaDTO
Imports CamadaBLL
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
30/34
Isso necessrio pois precisamos acessar os mtodos da camada denegcios e os objetos na camada DTO.
Precisamos definir uma enumerao para declarar qual a ao quedesejamos realizar. A seguir temos a enumerao FlagAcaoquedefine 3 tipos de operao:Insert, Update, Delete e NoAction:
Public Enum FlagActionInsert = 1Update = 2Delete = 3NoAction = 0
End EnumNo formulrio vamos declarar as variveis para tratar as classes Aluno eClasse:
Private _alunos As List(Of Aluno)Private _aluno As AlunoPrivate _classe As ClassePrivate _classes As List(Of Classe)
Esses objetos permitiro acessar e obter informaes sobre alunos eclasses.
No evento Loaddo formulrio form1.vb vamos carregar acombobox cboClassese o DataGridView dgvAlunoscom asinformaes das classes e alunos:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles MyBase.Load
carregaCombo()carregaGrid(cboClasses.SelectedValue)
End SubO cdigo do procedimento carregaCombo() o seguinte:
Sub carregaCombo()Dim clsBLL As New ClasseBLL
_classes = clsBLL.GetTodasClassesWith cboClasses
.DataSource = _classes
.DisplayMember = "NomeClasse"
.ValueMember = "ClasseId"End With
End SubO cdigo acessa o mtodo GetTodasClassesda camada de negcios e
preenche o combobox com as classes.
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
31/34
O cdigo do procedimento carregaGrid() o seguinte:
Sub carregaGrid(ByVal classeID As Integer)Dim alnBLL As New AlunosBLL
_alunos = alnBLL.GetAlunosPorClasse(classeID)
With dgvAlunos
.DataSource = _alunos
.ColumnHeadersVisible = True
.ColumnHeadersDefaultCellStyle.ForeColor = Color.BurlyWood
.Columns.Item("ClasseId").Visible = False
.Columns.Item("AlunoId").HeaderText = "Codigo do Aluno"
.Columns.Item("NomeAluno").HeaderText = "Nome do Aluno"
.Columns.Item("Acao").Visible = FalseEnd With
End SubO cdigo acessa o mtodo GetAlunosPorClasse() passando o cdigoda classe e forma a obter e exibir os alunos de acordo com a classeselecionada.
No evento SelectedIndexChanged da combobox cboClassestemos ocdigo que obtm as classes e conforme a alterao da classeselecionada carrega e atualiza o datagridview com os alunospertencentes classe selecionada:
Private Sub cboClasses_SelectedIndexChanged(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles cboClasses.SelectedIndexChanged
If cboClasses.SelectedIndex = -1 Then Exit SubDim cls As ClasseDim clsBLL As New ClasseBLLcls = clsBLL.GetClassePorCodigo(cboClasses.SelectedIndex + 1)If Not IsNothing(cls) Then
carregaGrid(cls.ClasseId)Me.txtNovaClasse.Text = cls.NomeClasse
End IfEnd Sub
No evento Clickdo boto nova classe apenas preparamos a interfacepara incluir uma nova classe ou cancelar a operao:
Private Sub btnNovaClasse_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnNovaClasse.Click
If btnNovaClasse.Text = "Nova Classe" ThenbtnNovaClasse.Text = "Cancelar"btnSalvarClasse.Enabled = TrueMe.txtNovaClasse.Text = ""Me.cboClasses.SelectedIndex = -1
grpNovaClasse.Text = "Informe uma nova Classe"grpNovaClasse.BackColor = Color.MintCreamgrpAlunos.Visible = True
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
32/34
grpAlunos.Enabled = False
Me.txtNovaClasse.Focus()ElseIf btnNovaClasse.Text = "Cancelar" Then
grpNovaClasse.BackColor = Color.PinkgrpAlunos.Visible = True
grpAlunos.Enabled = TruebtnNovaClasse.Text = "Nova Classe"
End IfEnd Sub
No evento Clickdo boto Salvar chamamos oprocedimento SalvarClasse():
Private Sub btnSalvarClasse_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnSalvarClasse.Click
SalvarClasse()
End SubO procedimento SalvarClasse() realizar a incluso de uma nova classeou atualizao de uma classe existente:
Sub SalvarClasse()
Dim bln As BooleanDim clsBLL As New ClasseBLLDim cls As New Classe
If txtNovaClasse.Text = String.Empty Or txtNovaClasse.Text.Length < 5 ThenMsgBox("Informe o nome da nova classe (minmo 5 caracteres).")txtNovaClasse.Focus()Return
End If
cls.NomeClasse = Me.txtNovaClasse.Text.Trim
If cboClasses.SelectedIndex = -1 Thencls.Acao = FlagAcao.Insert
Elsecls.ClasseId = cboClasses.SelectedValuecls.Acao = FlagAcao.Update
End If
bln = clsBLL.Salvar(cls)
If bln ThenMessageBox.Show("Dados Atualizados com sucesso !")If cboClasses.SelectedIndex = -1 Then
carregaCombo()cboClasses.SelectedIndex = 0
End IfRefresh(cboClasses.SelectedIndex)grpNovaClasse.Visible = TruegrpAlunos.Enabled = True
btnSalvarClasse.Enabled = FalseElse
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
33/34
MessageBox.Show("Ocorreu um erro ao atualizar os dados !!")btnSalvarClasse.Enabled = False
End IfEnd Sub
No cdigo do evento Clickdo boto Salvar (grpAlunos) verificamos seexiste uma classe selecionada e um nome de aluno informado parachamar o procedimentoSalvarAluno():
Private Sub btnSalvarAluno_Click(ByVal sender As System.Object, ByVal e AsSystem.EventArgs) Handles btnSalvarAluno.Click
ErrorProvider1.Clear()If cboClasses.SelectedIndex = -1 Then
ErrorProvider1.SetError(Me.cboClasses, "Selecione uma Classe!!")Exit Sub
End IfIf Me.txtNovoAluno.Text.Trim() = "" Then
ErrorProvider1.SetError(Me.txtNovoAluno, "Informe o nome do Aluno !!")Exit Sub
End IfSalvarAluno()
End SubO procedimento SalvarAluno() obtm a classe e o nome do aluno,define a ao e chama o mtodo SalvaAluno() passando o objetoAluno para persistncia dos dados:
Sub SalvarAluno()
Dim alnBLL As New AlunosBLLDim aln As New AlunoDim cls As New ClasseDim clsBLL As New ClasseBLLTry
'obtem a classe selecionadacls = clsBLL.GetClassePorCodigo(cboClasses.SelectedIndex + 1)'obtem o id da classealn.ClasseId = cls.ClasseId'obtem o nome do alunoaln.NomeAluno = Me.txtNovoAluno.Text'define a aoaln.Acao = FlagAcao.Insert'usa o mtodo para salvar o alunoalnBLL.SalvaAluno(aln)MessageBox.Show("Dados do aluno atualizado com sucesso !!")
Catch ex As ExceptionMessageBox.Show(ex.Message)
End TryEnd Sub
Estamos sobrescrevendo o mtodo Refresh do formulrio ondeatualizamos o controle combobox cboClasses conforme abaixo:
Public Overloads Sub Refresh(ByVal intID As Integer)
5/22/2018 VB .NET - 7 Passos Para Criar Uma Aplicao Em 3 Camadas
34/34
cboClasses.DataSource = _classescboClasses.Refresh()cboClasses.SelectedIndex = intID
End SubFinalmente o evento CLick do boto Sair encerra a aplicao:
Private Sub btnSair_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles btnSair.Click
Application.Exit()End Sub
Como podemos observar nossa camada de apresentao no utilizanem usa nenhuma referncia para realizar a persistncia, ao invsdisso ela usa os mtodos da camada de negcios para realizar tais
operaes. Assim qualquer mudana na camada de acesso a dadosno afeta diretamente nossa camada de apresentao.
O exemplo da camada de apresentao no esta completo e foi usadoapenas para ilustrar a separao das responsabilidades em camadas.
Assim completamos a nossa caminhada em 7 passos onde percorremosas etapas bsicas onde em cada passo abordamos os conceitosrelacionados com a separao de responsabilidades e a criao decamadas.