Vous êtes sur la page 1sur 41

REDE DE ENSINO DOCTUM

FACULDADES DOCTUM IPATINGA MG


Pgina 1 de 41

Aplicao em camadas utilizando


C# e Conceitos de POO
Parte 1
Objetivo: praticar o desenvolvimento de uma aplicao para que voc adquira habilidades para a construo
ou manuteno de aplicaes mais complexas.
Conceitos Trabalhados:

Programao orientada a objetos;

Integridade referencial de banco de dados;

Uso de transaes via linguagem de programao C# .Net;

Implementao de algoritmos de segurana no desenvolvimento de aplicaes;

Conhecimentos a serem adquiridos:

Comunicao entre as camadas;

Vantagens do modelo de desenvolvimento em camadas;

Controle de transaes do banco de dados com o ADO .Net;

Construo de uma aplicao para Windows;

Construo de uma aplicao para a Web;

A importncia da segurana no desenvolvimento de aplicaes.

A metodologia utilizada ser o desenvolvimento em trs camadas. Veremos a diferena entre:

Camada de acesso dados ou Data Access Layer (DAL);

Camada de regras de negcio ou Business Logic Layer (BLL); e

Camada de interface do usurio ou User Interface (UI).

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 2 de 41

Parte 2 Criando a infraestrutura


Nome do Banco: Loja
Tabelas: Clientes

CREATE TABLE [CLIENTES] (


[CODIGO] [int] IDENTITY (1, 1) NOT NULL ,
[NOME] [varchar] (100) ,
[EMAIL] [varchar] (100) ,
[TELEFONE] [varchar] (80) ,
CONSTRAINT [PK_CLIENTES] PRIMARY KEY CLUSTERED
(
[CODIGO]
) ON [PRIMARY]
) ON [PRIMARY]
GO

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 3 de 41
Insira um registro atravs do cdigo abaixo:

insert into clientes(nome,email,telefone)


values ("Teste","teste@hotmail.com","(31) 8888-3333")

Tabelas: Produtos

CREATE TABLE [PRODUTOS] (


[CODIGO] [int] IDENTITY (1, 1) NOT NULL,
[NOME] [varchar] (100),
[PRECO] decimal(10,2) ,
[ESTOQUE] [int] ,
CONSTRAINT [PK_PRODUTOS] PRIMARY KEY CLUSTERED
(
[CODIGO]
) ON [PRIMARY]
) ON [PRIMARY]
GO

Agora vamos inserir trs produtos utilizando o cdigo abaixo:

insert into produtos (nome, preco, estoque)


values ("Computador Dell Inspiron 3647-B20M com Intel","2312.10","15")

insert into produtos (nome, preco, estoque)


values ("Notebook Samsung ATIV Book 3 370E4K-KD4 com Intel Core i3","1399.90","150")
insert into produtos (nome, preco, estoque)
values ("Impressora HP Officejet Pro 6230 ePrinter com Conexo WiFi","289.99","50")

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 4 de 41

Tabela: Vendas
CREATE TABLE [VENDAS] (
[CODIGO] [int] IDENTITY (1, 1) NOT NULL ,
[DATA] [datetime],
[QUANTIDADE] [int],
[FATURADO] bit,
[CODIGOCLIENTE] [int],
[CODIGOPRODUTO] [int],
CONSTRAINT [PK_VENDAS] PRIMARY KEY CLUSTERED
(
[CODIGO]
) ON [PRIMARY],
CONSTRAINT [FK_Codigo_Cliente] FOREIGN KEY
(
[CODIGOCLIENTE]
) REFERENCES [Clientes] (
[Codigo]
),
CONSTRAINT [FK_Codigo_Produto] FOREIGN KEY
(
[CODIGOPRODUTO]
) REFERENCES [Produtos] (
[Codigo]
)

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 5 de 41
) ON [PRIMARY]
GO

A tabela de Vendas que acabamos de criar possui duas foreign keys (chaves estrangeiras). Essas duas
chaves so os campos: CodigoCliente e CodigoProduto.
Isso significa que quando um registro for inserido nesta tabela, o campo CodigoCliente includo dever
existir na tabela de Clientes, assim como o campo CodigoProduto dever existir na tabela Produtos.
Se algum tentar incluir valores nestes campos que no existam nas tabelas citadas o Microsoft SQL
Server vai informar a ocorrncia de um erro e no permitir a incluso.
Esse mecanismo do sistema gerenciador de banco de dados existe para manter a integridade dos
dados. Chamamos isso de integridade referencial.
Uma regra que vamos usar no nosso projeto que ao realizar uma venda, atualizaremos o estoque do
produto na tabela de Produtos. Faremos com que o estoque fique atualizado com a seguinte frmula:
Estoque = Estoque Quantidade Vendida
Essa tarefa ser realizada juntamente com a tarefa de incluso da Venda na tabela de Vendas.
Assim, para manter a integridade dos dados, precisaremos garantir que as duas coisas aconteam:
1) a incluso na tabela de Vendas; e
2) a atualizao do estoque na tabela de Produtos.
Para isso usaremos uma Transao. Com a transao podemos garantir a execuo das duas tarefas.
Se uma delas for bem sucedida e a outra falhar, a transao desfaz a primeira tarefa mantendo assim a
integridade referencial.
Em outras palavras, no exisitir na tabela de Vendas um registro que tenha o cdigo do produto
vendido mas que o estoque deste produto na tabela de Produtos esteja desatualizado.
Veremos isso com mais detalhes no prximo artigo chamado Camada de Acesso a Dados (Data Access
Layer). Implementaremos as classes de acesso a dados e faremos esse controle transacional no mtodo Incluir
da classe de Vendas.

OBSERVAO:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 6 de 41
Para futura utilizao no nosso projeto, precisaremos guardar as seguintes informaes sobre o banco
de dados:
Nome do servidor de banco de dados que estamos usando;
Nome do banco de dados onde as trs tabelas foram criadas;

Essa informao importante para a construo da nossa string de conexo ou connectionstring.


A connectionstring ser usada para a conexo com o banco de dados atravs da aplicao que
desenvolveremos neste projeto.

server=PC-Priscila\SQLEXPRESS;database=Loja;Integrated Security

Parte 3 Camada de Acesso a Dados


Essa camada normalmente tambm chamada de DAL (Data Access Layer). Nessa camada vamos
implementar os mtodos de insero, atualizao, excluso e listagem referentes a todas as tabelas existentes
no nosso projeto.
Essa uma tarefa simples, j que para criar cada classe usaremos os nomes dos campos da
respectiva tabela existente no banco de dados.

Comearemos o desenvolvimento da aplicao da camada mais interna at a mais externa. Dessa


forma, iniciaremos a implementao com a camada de acesso a dados (DAL).

Dentro da camada DAL ns temos o projeto Modelos. Vamos criar esse projeto.
No projeto chamado Modelos iremos implementar as classes:
Cliente.cs
Produto.cs e
Venda.cs
necessrio criar uma classe para cada tabela do nosso projeto.

A partir do menu Iniciar > Programas > Microsoft Visual Studio xxxx, abra o Microsoft Visual Studio
xxxx.
Clique no Menu File > New > Project...

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 7 de 41

Selecione as opes conforme imagem da janela abaixo:

No tipo de projeto selecione Visual C#;


No tipo de template selecione Class Library;
No Nome do projeto digite Modelos;
Na localizao do projeto digite C:\POO\Loja;
Deixe a opo Create directory for solution selecionada e clique em Ok para criar o projeto.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 8 de 41
Abrindo o Windows Explorer, podemos ver que a pasta Loja foi criada no drive C:\POO:
Dentro da pasta Loja foi criada a pasta do projeto Modelos.

Do lado direito, do visual Studio, vemos a rea do Solution Explorer.


- Clique com o boto direito sobre o arquivo Class1.cs e escolha Rename para renomear a classe
para Cliente.cs;
Ao renomear o arquivo da classe, perceba que o nome da classe muda automaticamente na janela
de cdigo (public class Cliente).
- Na janela de cdigo esquerda, inclua o nome do nosso projeto (Loja) no namespace, de maneira
que o namespace fique Loja.Modelos como na figura abaixo:

Agora codifique a classe cliente conforme imagem abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 9 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 10 de 41

Para incrementar as demais classes, clique com o boto direito do mouse sobre o projeto Modelos e ento
escolha Add. Em seguida escolha New Item como na figura abaixo:

Na janela Add New Item, escolha o template Class e digite Produto.cs no campo name. Clique em Add para
adicionar a nova classe ao projeto Modelos.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 11 de 41

A classe est criada conforme imagem abaixo:

Os comandos echo ou print servem para escrever algo na tela. Basta utilizar o comando abaixo dentro da tag
PHP:
Altere o namespace de modo que ele fique assim:
namespace Loja.Modelos
Feito isto, agora codifique a classe Produto conforme imagem abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 12 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 13 de 41

Legal! J implementamos as classes do projeto Modelo para a tabela de Clientes e para a tabela de Produtos. Agora
vamos fazer o mesmo para a tabela de Vendas:
Clique com o boto direito sobre o projeto Modelos e ento escolha Add. Em seguida escolha New
Item... como na figura abaixo:
Altere o namespace de modo que ele fique assim:
namespace Loja.Modelos
Agora digite o cdigo abaixo dentro da classe Venda:

Para incrementar as demais classes, clique com o boto direito do mouse sobre o projeto Modelos e ento escolha
Add. Em seguida escolha New Item como na figura abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 14 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 15 de 41

Agora que implementamos no projeto Modelos as classes referentes a todas as tabelas contempladas no
nosso projeto, vamos compilar o projeto atravs da opo Build.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 16 de 41
Para compilar o projeto vamos fazer o seguinte. No Solution Explorer, clique com o boto direito sobre o
projeto Modelos e escolha a opo Build:

Se a compilao do nosso projeto for realizada com sucesso, aparecer a mensagem Build succeeded na
barra de status do Microsoft Visual Studio:

Quando compilamos o projeto com a opo Build, o MS Visual Studio criou o arquivo Modelos.dll.
O arquivo Modelos.dll contm toda a informao que implementamos nas classes desse projeto e ele que
ser usado no prximo projeto a ser implementado, que a Camada de Acesso a Dados ou DAL (Data Access Layer).

Agora que terminamos o projeto Modelos, vamos criar um Diagrama de Classes para ter uma viso melhor
da nossa arte.
Para incrementar as demais classes, clique com o boto direito do mouse sobre o projeto Modelos e ento
escolha Add. Em seguida escolha New Item como na figura abaixo:

Clique com o boto direito sobre o projeto Modelos e escolha Add > New Item...

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 17 de 41

Na janela Add New Item, escolha o template Class Diagram. Digite Modelos.cd no nome e clique
em Add para criar o nosso diagrama de classes como a seguir.

O ambiente chamado class designer exibido.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 18 de 41
Para a criao do diagrama vamos arrastar as classes Cliente, Produto e Venda do Solution Explorer para o Class Designer
(Arquivo Modelos.cd) como a seguir:

Com o Diagrama de Classes fica fcil a distino entre os campos e as propriedades que implementamos no
nosso projeto.
O asterisco ao lado do nome do diagrama Modelos.cd* indica que ele ainda no foi salvo. Digite <Ctrl> +
S para salvar o arquivo.
O prximo passo implementar as classes da camada DAL. Faremos isso no prximo artigo.

Parte 4 Implementao da Camada da DAL


Nesta etapa criaremos as classes abaixo:

ClientesDAL.cs Conter os mtodos de incluso, alterao, excluso e consulta referente a


tabela de clientes;

ProdutosDAL.cs Conter os mtodos de incluso, alterao, excluso e consulta referente a


tabela de produtos;

VendasDAL.cs Conter os mtodos de incluso, alterao, excluso e consulta referente a


tabela de vendas;

Dados.cs Ser utilizada para armazenamento da string de conexo com o banco de dados;

a)

Abra o Microsoft Visual Studio;

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 19 de 41
b)

Abra o projeto Modelos que criamos no artigo anterior.

c)

Vamos adicionar um novo projeto. No menu File do Visual Studio, clique em Add > New
Project.

d)

Na janela Add New Project:


- Escolha Visual C# para o tipo de projeto;
- Class Library para o template;
- Digite DAL no campo nome;
- Digite C:\Loja\DAL na localizao;
- Clique em Ok para adicionar o novo projeto nossa Solution (soluo).

e)

Nota: Quando temos um conjunto de projetos reunidos para atender uma necessidade
chamamos esse conjunto de Solution.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 20 de 41

f)

O nome da nossa Solution est como Modelos porque o MS Visual Studio usa o nome do
primeiro projeto criado.

g)

No Solution Explorer, clique com o boto direito sobre a Solution Modelos e escolha a
opo Rename. Renomeie a Solution para Loja.

h)

Depois que voc renomear a nossa Solution, ela ficar assim:

i)

No projeto DAL, Renomeie a classe Class1.cs para ClientesDAL.cs. Em seguida altere o


namespace para Loja.DAL. A nossa classe ClientesDAL ficar assim:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 21 de 41

j)

Como a implementao acontecer da camada mais interna para a mais externa do desenho
do nosso projeto. Ex: [Modelos] DAL BLL User Interface. Ento, o projeto Modelos o mais
interno e o prximo a camada de acesso a dados DAL. Isso significa que o nosso projeto
DAL poder usar tudo o que j foi construdo no projeto Modelos!

k)

Em termos de programao, dizemos que o projeto DAL faz referncia ao projeto Modelos.
Para que o nosso projeto DAL consiga ver o que j construmos no projeto Modelos, vamos
criar essa referncia.

l)

Abra a pasta References do projeto DAL para ver o que j existe como referncia sempre que
criamos um novo projeto:

m) Vamos incluir no projeto DAL uma referncia para o Modelos. Faa o seguinte:
Clique com o boto direito na pasta References do projeto DAL e escolha Add Reference...

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 22 de 41

n)

Na janela Add Reference que abrir, clique na aba Projects:

o)

Conforme imagem abaixo podemos visualizar nosso projeto modelo dentro do DAL

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 23 de 41

p)

Para enxergar os Modelos dentro da nossa classe ClientesDAL vamos adicionar a clusula
using conforme imagem abaixo.

q)

Aps digitarmos using Loja, percebemos que o MS Visual Studio j nos mostra as referncias
disponveis. Vamos escolher Modelos.

r)

Para que tenhamos acesso as definies do namespace do MS SQL Server, vamos inserir
mais uma clusula using para System.Data.SqlClient como a seguir:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 24 de 41

s)

Aps digitarmos using Loja, percebemos que o MS Visual Studio j nos mostra as referncias
disponveis. Vamos escolher Modelos.

t)

Para que tenhamos acesso as definies do namespace do MS SQL Server, vamos inserir
mais uma clusula using para System.Data.SqlClient como a seguir:

u)

Faa o cdigo da classe ClienteDALL, conforme imagem abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 25 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 26 de 41

v)

Vamos dar um Build no projeto para nos certificarmos de que est tudo certo. Clique com o
boto direito sobre o projeto DAL e escolha BUILD. Observe na imagem abaixo que um erro foi
encontrado:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 27 de 41

w) Na descrio do erro diz que o DataTable no foi encontrado. Isso ocorreu porque o tipo

DataTable est dentro do namespace System.Data e ns no chamamos com um using.


Ento vamos incluir a clusula using no incio da classe. Feito isto vamos dar um build
novamente e outros quatro erros aparecero. A descrio diz que o nome Dados no foi
encontrado. Ento vamos codific-las:
x)

Clique com o boto direito no projeto DAL e selecione Add > New Item.. Na janela que se
abrir, vamos escolher o template Class e dar o nome de Dados.cs. Clique no boto Add para
adicionar a nova classe ao projeto. Em seguida altere o namespace para Loja.DAL. Agora
acrescente o cdigo conforme imagem abaixo:

Data Source: O nome do seu servidor de banco de dados;


Initial Catalog: O nome do seu banco de dados;
Integrated Security=true: Dever ser colocado apenas se sua conexo com o banco utilizar
autenticao do Windows. Seno use:
user=nome do usurio;pwd=senha de acesso ao banco";

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 28 de 41

Prontinho! Fino e chique no rtimo! RS RS RS

Agora vamos montar a classe ProdutosDAL.

a)

Adicione mais uma classe ao projeto DAL de nome ProdutosDAL. Faa a incluso das
using Modelos, System.Data e System.Data.SqlCliente;

b)

Em seguida faa os ajustes no namespace para que fique conforme imagem abaixo:

c)

Baseado na classe ClientesDAL, codifique a classe ProdutosDAL.cs

d)

Cdigo da Classe VendasDAL

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 29 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 30 de 41

a)

Cdigo da Classe ProdutosDAL

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 31 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 32 de 41

Parte 5 Implementao da Camada da BLL


Nesta parte vamos implementar as classes da Camada BLL (Business Logic Layer).
Criaremos as classes:

ClientesBLL.cs
ProdutosBLL.cs
VendasBLL.cs

As regras de negcio definem como o seu negcio funciona. Essas regras podem abranger diversos assuntos
como suas polticas, interesses, objetivos, compromissos ticos e sociais, obrigaes contratuais, decises
estratgicas, leis e regulamentaes, entre outros.
No nosso projeto Loja vamos definir como regras de negcio:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 33 de 41
1) Regras para a incluso de clientes:
1.1) O nome do cliente obrigatrio;
1.2) O e-mail do cliente ser armazenado em letras minsculas;
2) Regras para a incluso de produtos:
2.1) O nome do produto obrigatrio;
2.2) O preo no pode ser um valor negativo;
2.3) O estoque no pode ser um valor negativo;

- Abra o Microsoft Visual Studio;


- Clique em File > Open > Project/Solution...
- Na janela Open Project, selecione o arquivo da nossa Solution (C:\Loja\Modelos\Loja.sln) e clique
em Open para abrir a soluo:

At este ponto do projeto temos implementados os projetos Modelos e DAL:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 34 de 41

Vamos adicionar a soluo o projeto BLL.


1)
2)

Clique com o boto direito na Solution Loja e escolha Add > New Project...
Na janela Add New Project vamos informar os seguintes dados:
Project type: Visual C#
Template: Class Library
Name: BLL
Location: C:\Loja\BLL

3)

Clique em Ok e o projeto ser adicionado.

4)

O projeto BLL ser criado:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 35 de 41

Analisando o nosso modelo em camadas podemos ver que a camada BLL aproveita os projetos Modelos e
DAL. Sendo assim, a primeira coisa que faremos no nosso projeto BLL ser adicionar esses dois projetos como referncia.
- Clique com o boto direito na pasta References do projeto BLL e escolha Add Reference...

- Na janela Add Reference, clique na aba Projects;


- Mantenha a tecla <CTRL> pressionada e clique sobre os projetos DAL e Modelos para selecion-los;
- Clique em Ok para adicionar as referncias.

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 36 de 41

Podemos verificar as referncias que acabamos de adicionar ao projeto BLL:

Vamos renomear a classe Class1.cs para ClientesBLL.cs.


- Clique com o boto direito sobre a classe Class1.cs, escolha a opo Rename e renomeie a classe
para ClientesBLL.cs:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 37 de 41

Cdigo da Classe ClienteBLL:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 38 de 41

D um Build no projeto BLL para confirmar a inexistncia de erros na codificao.


Agora adicione uma nova classe ao projeto BLL de nome ProdutosBLL.cs e codifique conforme imagem
abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 39 de 41

Agora vamos implementar a classe VendasBLL.cs. Crie a classe mencionada e codifique conforme
imagem abaixo:

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 40 de 41

REDE DE ENSINO DOCTUM


FACULDADES DOCTUM IPATINGA MG
Pgina 41 de 41
D um Build no projeto BLL para confirmar a inexistncia de erros na codificao.

Se voc abrir o projeto BLL no Windows Explorer, poder verificar que na pasta de DLLs do projeto
existem trs arquivos com a extenso DLL. Um do prprio projeto BLL e outros para as referncias que fizemos
aos projetos Modelos e DAL.

A prxima camada a ser implementada a interface com o usurio. No prximo artigo vamos construir um aplicativo
para Microsoft Windows (tambm chamado de Desktop application) que vai utilizar todas as camadas j desenvolvidas.