VB .NET - Criando uma aplicação em camadas (de novo)


O título do artigo já sugere que o assunto não é novo visto que já escrevi diversos artigos sobre o desenvolvimento de aplicações em camadas. (Veja as referências)

Mas este artigo apresenta uma novidade: nele eu vou mostrar como criar uma aplicação Windows Forms usando a linguagem VB .NET em camadas usando a separação física de componentes em assemblies distintos. Dessa forma iremos ter uma solução e 3 projetos distintos.

Nota: Para saber mais leia o meu artigo :  .NET - Definindo um infra-estrutura baseada em camadas

Neste artigo eu vou mostrar a arquitetura da solução explanando cada um dos seus componentes e a sua função.

Podemos dizer que este projeto será um projeto focado nos dados o que se conhece por Data Drive Development mas também podemos dizer que aplicaremos ao nosso projeto os conceitos do  Domain Drive Design (DDD) que propõe a separação clara das camadas da aplicação.

Domain-Driven Design não é uma tecnologia ou metodologia, mas sim uma abordagem de design de software disciplinada que reúne um conjunto de conceitos, técnicas e princípios com foco no domínio e na lógica do domínio para criar um domain model.  Grátis PDF do livro Domain Driven Design Quickly que é uma versão reduzida do livro Domain Driven Design do Eric Evans: Login to download this book FREE (PDF) - pegue o livro

Vamos começar explicando o nosso modelo de dados. Nosso modelo de dados é bem simples nele teremos duas entidades:

- Cursos - que representam as informações dos cursos oferecidos por uma escola
-
Estudantes - que representam as informações dos alunos que estão matriculados nos cursos.

Existe portanto uma relação entre as entidades, pois um curso pode ter um ou mais alunos matriculados e um aluno pode estar matriculado em um curso.

No modelo relacional de banco de dados podemos representar o relacionamento entre as entidades criando as tabelas Cursos e Estudantes. (Aqui o banco de dados a ser escolhido pode ser qualquer um. Para ficar mais simples eu vou usar o Microsoft Access)

A seguir temos um diagrama que representa as tabelas e seus campos (os atributos da entidade):

A tabela Cursos  possui o campo cursoID como chave primária

A tabela Estudantes possui o campo estudanteID como chave primária e o campo cursoID como chave estrangeira.

Existe um relacionamento do tipo um-para-muitos entre as tabelas onde um curso pode conter muitos alunos.

 

Estas duas tabelas estão contidas no banco de dados Matricula.mdb, um banco de dados Microsoft Access.

A aplicação terá como objetivo registrar a matricula dos alunos em um determinado curso. Para isso usarei uma aplicação Windows Forms (poderia ser uma aplicação web) onde teremos o seguinte formulário que vai efetuar o registro:

Nossa aplicação vai possuir 3 camadas assim representadas:

Nota: Na literatura encontram-se com frequência os termos tiers e layers, em inglês, que geralmente são traduzidos como camadas. Olhando com atenção, embora a diferença seja bem sutil, compreende-se que tiers refere-se a uma separação física dos componentes (diferentes Assemblies, DLLs, arquivos),  enquanto layers aponta para uma separação lógica dos componentes com classes distintas e diferentes espaços de nomes.

Abra o Visual Studio 2008 (você pode baixar a versão trial por 180 dias) e crie um novo projeto chamado AplicacaoTresCamadas usando a linguagem Visual Basic.

Agora vamos criar as 3 camadas separadas fisicamente. Para isso vamos adicionar 3 projetos distintos a partir do menu File -> Add -> New Project;

Na janela Add New Project vamos selecionar o template Class Library e informar o nome BusinessLogicLayer(BLL) que será a nossa camada de negócios que vai conter as classes com as regras de negócio da aplicação;

Em seguida vamos criar a segunda camada; A partir do menu File -> Add -> New Project;

Na janela Add New Project vamos selecionar o template Class Library e informar o nome DataAccesLayer(DAL) que será a nossa camada de acesso a dados e que conterá as classes para acesso aos dados da aplicação;

Finalmente vamos criar a nossa camada de apresentação (User Interface-UI); A partir do menu File -> Add -> New Project;

Na janela Add New Project vamos selecionar o template Windows Application e informar o nome EstudanteMatricula(UI) que será a nossa camada de apresentação e que conterá os formulários para compor a interface com o usuário.

Ao final a nossa aplicação dever exibir os seguintes projetos na janela Solution Explorer:

Nossa aplicação é composta dos seguintes componentes:

- A solução AplicacaoTresCamadas

- O projeto BusinessLogicLayer (BLL)

- O projeto DataAccessLayer (DAL)

- O projeto EstudanteMatricula (UI)

Definindo a camada de negócios - BusinessLogicLayer - BLL

Vamos começar definindo as classes da camada de negócio - BusinessLogicLayer. Vamos criar classes para representar as entidades que representam o domínio da nossa aplicação , no caso , as entidades Cursos e Estudantes. Como desejamos definir claramente as responsabilidades de cada entidade vamos criar duas classes, uma para representa a entidade Cursos e outra para representar a entidade Estudantes.

Selecione o projeto BusinessLogicLayer e no menu Project selecione Add New Item ;

Na janela Add New Item selecione o template Class e informe o nome BLLCurso.vb

Repita o procedimento e crie agora a classe BLLEstudante.vb

Ao final deveremos ver na janela Solution Explorer as duas classes criadas conforme a figura abaixo:

Agora vamos definir o conteúdo da classe BLLCurso. Aqui você pode definir métodos e rotinas conforme a definição dos requisitos do projeto. Para este nosso  exemplo eu vou definir apenas dois métodos:

No início do arquivo BLLCurso.vb devemos declarar os imports usados:

Imports System
Imports
System.Data

A seguir vamos declarar um namespace :

Namespace BLL.Cursos

A seguir defina o nome da classe :

Public Class BLLCurso

Agora vamos definir variáveis globais que devem ser visíveis na classe:

Private _obj As DALCurso = Nothing
Private
_dset As DataSet =
Nothing

 Em seguida temos os dois métodos definidos conforme o código a seguir:

Public Function TodosCursos() As DataSet


   _dset =
Nothing


     Try

          _obj = New DALCurso()

          _dset = _obj.TodosCursos()

     Catch ex As Exception

            Throw ex

     Finally

     _obj = Nothing

     End Try
 

    Return _dset
 

End Function

 

 

Public Shared Function GetPrecoCurso(ByVal CursoID As Integer) As Double


   Dim _preco As Double = 0

   Dim _objc As DALCurso = Nothing

 

   Try

         _objc = New DALCurso()

         _preco = _objc.getCursoPreco(CursoID)

    Catch ex As Exception

              Throw ex

    Finally

           _objc = Nothing

     End Try

Return _preco
 

End Function

Observe que o método TodosCursos retorna um dataset e que instancia a classe DALCurso(), que ainda vamos criar, e chama o método TodosCursos.

O método GetPrecoCurso também cria uma instância da classe DALCurso() e usando o método getCursoPreco() que retorna o preço do curso, um valor do tipo Double.

Veja a continuação deste artigo em : VB .NET - Criando uma aplicação em camadas (de novo) II

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti