VB .NET - 7 Passos Para Criar Uma Aplicação Em 3 Camadas

  • 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_camadas
  • 5/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/express
  • 5/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-t4BwgLdtLbaixFzwJg
  • 5/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.htm
  • 5/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.htm
  • 5/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.