VB .NET - 7 passos para criar uma aplicação em 3 Camadas - Parte
2
Na primeira parte deste artigo demos os primeiros passos em nossa caminhada cujo objetivo é criar uma aplicação em camadas usando o VB .NET.
Iremos agora iniciar a definição de cada uma das camadas da nossa aplicação começando pela camada DTO que deve estar acessível a todas as camadas da solução e funciona como uma camada de transferência de objetos entre as demais camadas.
Passo 4 - Definindo as
classes do nosso domínio 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 as classes que representam o nosso domínio.
Nosso modelo nos leva a criar as entidades Classe e Aluno que são classes que deverão representar as tabelas Classe e Alunos.
Vamos então definir as classes e nestas classes vamos definir os membros que representam os campos das respectivas tabelas.
1- Criando a classe Classe no projeto CamadaDTO
Clique com o botão direito do mouse sobre o projeto CamadaDTO e selecione Add->Class;
Selecione o template Class e informe o nome Classe.vb e clique no botão Add;
A seguir vamos definir o código abaixo nesta classe:
Public Class Classe
Private _id As Integer
Private _nome As String
Private _acao As Byte
Public Property ClasseId() As String
Get
Return _id
End Get
Set(ByVal value As String)
_id = value
End Set
End Property
Public Property NomeClasse() As String
Get
Return _nome
End Get
Set(ByVal value As String)
_nome = value
End Set
End Property
Public Property Acao() As Byte
Get
Return _acao
End Get
Set(ByVal value As Byte)
_acao = value
End Set
End Property
End Class
|
A classe Classe
possui os membros _id , _nome e _acao e as propriedades: - ClasseID Onde ClasseID
representa o campo id da tabela Classe e a propriedade A propriedade Acao
representa a ação que pretendemos realizar na tabela e A propriedade Acao
foi definida na classe apenas para mostrar que podemos |
2- Criando a classe Aluno no projeto CamadaDTO
Clique com o botão direito do mouse sobre o projeto CamadaDTO e selecione Add->Class;
Selecione o template Class e informe o nome Aluno.vb e clique no botão Add;
A seguir vamos definir o código abaixo nesta classe:
Public Class Aluno
Private _id As Integer
Private _nome As String
Private _classeid As Integer
Private _acao As Byte
Public Property AlunoId() As Integer
Get
Return _id
End Get
Set(ByVal value As Integer)
_id = value
End Set
End Property
Public Property NomeAluno() As String
Get
Return _nome
End Get
Set(ByVal value As String)
_nome = value
End Set
End Property
Public Property ClasseId As Integer
Get
Return _classeid
End Get
Set(ByVal value As Integer)
_classeid = value
End Set
End Property
Public Property Acao() As Byte
Get
Return _acao
End Get
Set(ByVal value As Byte)
_acao = value
End Set
End Property
End Class
|
A classe Aluno
possui os membros _id , _nome, classeid e _acao e as
propriedades: - AlunoID Onde AlunoID
representa o campo id da tabela Aluno, a propriedade A propriedade
Acao
representa a ação que pretendemos realizar na tabela e A propriedade
Acao
foi definida na classe apenas para mostrar que podemos Obs: Estou usando a
sintaxe antiga para definir as propriedades. A nova
sintaxe simplifica Public
Property AlunoId As Integer |
A camada DTO tem como responsabilidade a transferência das informações sobre os objetos Classe e Aluno entre as demais camadas. Lembrando que um DTO não tem nenhum comportamento, exceto para armazenamento e recuperação de seus próprios dados (acessores e modificadores).
Passo 5 - Definindo a
camada de acesso a dados - CamadaDAL
A camada de acesso a dados é responsável pelo acesso e a persistência dos dados e nesta camada vamos definir as classes que contém os métodos genéricos para acessar e persistir dados e as classes específicas relacionadas com as classes do nosso domínio. Assim teremos as seguintes classes nesta camada:
Além destas classes a camada de acesso a dados deverá possuir também um arquivo de configuração app.Config onde iremos armazenar a string de conexão e um módulo chamado GlobalDAL.vb que conterá uma enumeração definindo as ações que poderemos fazer em nossas entidades.
1- Criando o arquivo de configuração app.config
Clique com o botão direito do mouse sobre o projeto CamadaDAL e selecione Add -> New Item;
A seguir selecione o template Application Configuration File e aceite o nome app.config e clique em Add;
A seguir defina neste arquivo entre as tags <configuration> a tag <connectionStrings> contendo a string de conexão com o nosso banco de dados Escola conforme abaixo:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
.......
<connectionStrings>
<add name="ConexaoSQLServer" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=Escola;Persist Security Info=True;" providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
|
2- Criando o módulo GlobalDAL.vb
Clique com o botão direito do mouse sobre o projeto CamadaDAL e selecione Add -> Module;
A seguir selecione o template Module e informe o nome GlobalDAL.vb;
A seguir defina neste arquivo o seguinte código:
Module GlobalDAL
Public Enum FlagAcao
Insert = 1
Update = 2
Delete = 3
NoAction = 0
End Enum
End Module
|
3- Criando as classes AcessoDados, AlunosDAL e ClasseDAL
a- Criando a classe genérica AcessoDados (SQLHelp)
Clique com o botão direito do mouse sobre o projeto CamadaDAL e selecione Add -> Class;
A seguir selecione o template Class e informe o nome AcessoDados.vb;
A seguir defina neste arquivo o seguinte código:
Imports System.Configuration
Imports System.Data.SqlClient
Public Class AcessoDados
Dim conn As SqlConnection
Dim cmd As SqlCommand
Dim isTran As Boolean
Private trans As SqlTransaction
Dim connStr As String
Public Shared Function GetConnectionString(ByVal strConnection As String) As String
Dim retorno As New String("")
If Not String.IsNullOrEmpty(strConnection) Then
Try
retorno = ConfigurationManager.ConnectionStrings(strConnection).ConnectionString
Catch ex As Exception
MsgBox(ex.Message)
End Try
Else
retorno = ConfigurationManager.ConnectionStrings("ConexaoSQLServer").ConnectionString
End If
Return retorno
End Function
Private Function Connect() As Boolean
Dim connstr As String
Dim bln As Boolean
'Try
If conn Is Nothing Then
connstr = GetConnectionString("ConexaoSQLServer")
If connstr <> String.Empty Then
bln = True
conn = New SqlConnection(connstr)
Else
bln = False
End If
End If
If conn.State = ConnectionState.Closed Then
Try
conn.Open()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
Return bln
End Function
Public Sub CloseConn()
If Not conn Is Nothing Then
If Not conn.State = ConnectionState.Closed Then
conn.Close()
End If
End If
End Sub
Public Function ExecuteQuery(ByVal strCmdTxt As String) As Boolean
Dim intRows As Integer
If conn.State = ConnectionState.Closed Then
Connect()
End If
cmd = New SqlCommand
cmd.Connection = conn
cmd.CommandText = strCmdTxt
cmd.CommandType = CommandType.Text
If Not isTran Then
intRows = cmd.ExecuteNonQuery()
conn.Close()
Else
cmd.Transaction = trans
intRows = cmd.ExecuteNonQuery()
End If
If intRows > 0 Then
ExecuteQuery = True
Else
ExecuteQuery = False
End If
End Function
Public Function ExecuteAndGetReader(ByVal strCmdTxt As String) As SqlDataReader
If conn.State = ConnectionState.Closed Then
Connect()
End If
cmd = New SqlCommand
cmd.Connection = conn
cmd.CommandText = strCmdTxt
cmd.CommandType = CommandType.Text
If Not isTran Then
ExecuteAndGetReader = cmd.ExecuteReader
Else
cmd.Transaction = trans
ExecuteAndGetReader = cmd.ExecuteReader
End If
End Function
Public Sub New()
If Not Connect() Then
Exit Sub
End If
End Sub
Public Sub BeginTransaction()
If isTran Then Return
If conn.State = ConnectionState.Closed Then
conn.Open()
End If
trans = conn.BeginTransaction()
isTran = True
End Sub
Public Sub CommitTransaction()
If Not isTran Then Return
trans.Commit()
conn.Close()
trans = Nothing
isTran = False
End Sub
Public Sub RollBackTransaction()
If Not isTran Then Return
trans.Rollback()
conn.Close()
trans = Nothing
isTran = False
End Sub
End Class
|
Nesta classe temos
definidos os seguintes métodos:
Os métodos definidos nesta
classe são de uso geral e serão usados para acessar o
banco de dados Procurei manter este arquivo o mais simples possível mas ele pode ser melhorado com outras opções. |
b- Criando a classe AlunosDAL com métodos específicos acessar e persitir dados de um objeto do tipo Aluno
Clique com o botão direito do mouse sobre o projeto CamadaDAL e selecione Add -> Class;
A seguir selecione o template Class e informe o nome AlunosDAL.vb;
A seguir defina neste arquivo o seguinte código:
Imports System.Data.SqlClient
Imports CamadaDTO
Imports System.Collections.Generic
Public Class AlunosDAL
Public Function DeletaAlunoPorId(ByVal _alunoId As Integer) As Boolean
Dim strSql As String
Dim objDB As AcessoDados
strSql = "Delete from Alunos where id=" & _alunoId
objDB = New AcessoDados
objDB.ExecuteQuery(strSql)
Return True
End Function
Public Function GetAlunos() As List(Of Aluno)
Dim objdb As New AcessoDados
Dim 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 While
dr.Close()
Return lista
End Function
Public Function GetAlunoPorId(ByVal alunoid As Integer) As Aluno
Dim objdb As New AcessoDados
Dim strSql As String = ""
Dim alu As Aluno = Nothing
strSql = "Select * from Alunos where id= " & alunoid
Dim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)
While 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"))
End While
dr.Close()
Return alu
End Function
Public Function GetAlunosPorClasse(ByVal classeid As Integer) As List(Of Aluno)
Dim objdb As New AcessoDados
Dim strSql As String = ""
strSql = "Select * from Alunos where classeid= " & classeid
Dim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)
Dim lista As New List(Of Aluno)
Dim alu As Aluno = Nothing
While 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 While
dr.Close()
Return lista
End Function
Public Function SalvaAluno(ByVal _aluno As Aluno) As Boolean
Dim strsql As String = ""
Dim objDB As New AcessoDados
If _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 If
objDB.ExecuteQuery(strsql)
Return True
End Function
End Class
|
Nesta classe criamos os métodos:
c- Criando a classe ClasseDAL com métodos específicos acessar e persitir dados de um objeto do tipo Classe
Clique com o botão direito do mouse sobre o projeto CamadaDAL e selecione Add -> Class;
A seguir selecione o template Class e informe o nome ClasseDAL.vb;
A seguir defina neste arquivo o seguinte código:
Imports System.Data.SqlClient
Imports CamadaDTO
Imports System.Collections.Generic
Public Class ClasseDAL
Public Function DeletaClasse(ByVal ClasseID As Integer) As Boolean
Dim strSql As String
Dim objdb As New AcessoDados
Try
strSql = "Delete from Alunos where id= " & ClasseID
objdb.ExecuteQuery(strSql)
objdb = New AcessoDados
strSql = "Delete from Classe where id= " & ClasseID
objdb.ExecuteQuery(strSql)
Catch ex As Exception
Throw New Exception
End Try
Return True
End Function
Public Function GetClasses() As List(Of Classe)
Dim strSql As String
Dim objdb As New AcessoDados
Dim 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 Classe
cls.ClasseId = IIf(IsDBNull(dr("id")), 0, dr("id"))
cls.NomeClasse = IIf(IsDBNull(dr("nome")), "", dr("nome"))
lista.Add(cls)
End While
dr.Close()
Return lista
End Function
Public Function GetClassePorId(ByVal Id As Integer) As Classe
Dim strSql As String
Dim objdb As New AcessoDados
Dim cls As Classe = Nothing
strSql = "Select * from Classe where id= " & Id
Dim dr As SqlDataReader = objdb.ExecuteAndGetReader(strSql)
Dim arr As New ArrayList
While dr.Read
cls = New Classe
cls.ClasseId = IIf(IsDBNull(dr("id")), 0, dr("id"))
cls.NomeClasse = IIf(IsDBNull(dr("nome")), "", dr("nome"))
End While
dr.Close()
Return cls
End Function
Public Function Salva(ByVal cls As Classe) As Boolean
Dim strsql As String = String.Empty
Dim objDB As New AcessoDados
If 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.ClasseId
Else
Return False
End If
Try
objDB.ExecuteQuery(strsql)
Catch ex As Exception
Throw New Exception
End Try
Return True
End Function
End Class
|
Nesta classe criamos os métodos:
Nos métodos das classes AlunosDAL e ClasseDAL estamos usando instruções SQL como texto no código. Uma melhor opção seria a utilização de stored procedures por serem mais seguras e mais rápidas.
Aguarde os próximos passos na segunda parte do artigo: VB .NET - 7 passos para criar uma aplicação em 3 Camadas - Parte 3
|
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: