.NET

24 set, 2009

C# – Gerenciamento de banco de dados MySQL – Parte 02

Publicidade

Continuando o assunto do último artigo, veremos a definição da camada de
negócios – Business Logic Layer (BLL) da nossa aplicação. Lembrando que estamos usando a arquitetura
em 3 camadas definidas assim:

  1. A camada de interface: UI –
    namespace UI
  2. A camada de negócios: BLL –
    namespace BLL e classe produtoBLL
  3. A camada de acesso a dados:
    DAL – namespace DAL e classe produtoDAL

Em uma aplicação em 3 camadas temos uma hierarquia
de chamadas onde:

c_mysql21.gif

A UI chama a BLL que chama a DAL que por sua vez acesso os dados e retorna os
objetos;

Nunca deverá haver uma chamada
direta da UI para a DAL e vice-versa (quando usamos os
controles de acesso a dados vinculados no formulário, estamos
fazendo o acesso direto da camada de interface para a DAL ou
banco de dados, o que não é uma boa prática).

Nosso projeto possui a seguinte estrutura:

  • produtoBLL – contém os métodos das
    regras de negócio; (namespace BLL)
  • produtoDAL – contém os métodos para
    acesso a dados no MySQL; (namespace DAL)
  • produto – contém a classe Produto;
    (namespace DTO)
  • UI – representa a nossa
    aplicação Windows Forms;
c_mysql16.gif

Onde já implementamos a classe produtoDAL na camada
DAL.

Vamos agora mostrar a definição da camada BLL
onde temos a classe produtoBLL. A classe produtoBLL possui os
seguintes métodos:

  • DataTable selecionaProdutos() – retorna
    todos os produtos ;
  • novoProduto(Produto produto) – inclui um
    novo produto;
  • alteraProduto(Produto produto) – altera
    os dados de um produto;
  • excluiProduto(Produto produto) – exclui
    um produto;
  • List<Produto> listaProdutos() –
    retorna uma lista genérica de produtos;
  • Produto listaProdutoPorID(int id) –
    retorna um único produto;

Conforme é mostrado na figura a seguir:

c_mysql22.gif

Vejamos o código da classe produtoBLL:

Devemos declarar os seguintes namespaces nos
imports:

using
System.Collections.Generic;

using
System;

using
DAL;

using
DTO;

using
System.Data;

Precisamos da referência à camada DAL para acessar
os métodos da classe produtoDAL e da referência à camada DTO para
acessar as propriedades da entidade Produto. A referência a Generic deve-se ao
fato de estarmos retornando uma lista genérica de produtos no método
listaProdutos();

O construtor da classe ProdutoBB está vazio:

public produtoBLL()

{}

Agora vejamos os métodos:

1. selecionaProdutos() – retorna um
datatable com todos os produtos usando o método selectProdutos() da
camada DAL;

public
DataTable
selecionaProdutos()

{

DataTable tb = new DataTable();

try{

dal = new DAL.produtoDAL();

tb = dal.selectProdutos();

}

catch (Exception ex)

{

throw ex;

}

return tb;

}

2. listaProdutoPorID() – Usada para
retornar uma entidade Produto representando um único produto pelo seu
código (id) através do método selectProdutoByID() da camada DAL;

public Produto listaProdutoPorID(int id)

{

try{

dal = new produtoDAL();

return dal.selectProdutoByID(id);

}catch (Exception ex) {

throw ex;

}

}

3. listaProdutos() – Usada para
retornar uma lista de objetos Produto representando uma coleção de produtos
usando o método selectListProdutos() da camada DAL;

public List<Produto> listaProdutos()

{

try{

dal = new produtoDAL();

return dal.selectListProdutos();

}catch (Exception ex) {

throw ex;

}

}

4. novoProduto(Produto produto) – Usada para
incluir um novo produto no estoque usando o método insertProduto() da
camada DAL;

public void novoProduto(Produto produto){

try{

dal = new DAL.produtoDAL();

dal.insertProduto(produto);

}catch (Exception ex) {

throw ex;

}

}

5. updateProduto() – Usada para atualizar os
dados de um produto no estoque através do método updateProduto() da
camada DAL;

public void alteraProduto(Produto produto){

try{

dal = new DAL.produtoDAL();

dal.updateProduto(produto);

}catch (Exception ex) {

throw ex;

}

}

6. deleteProduto() – Usada para excluir um
produto no estoque via método deleteProduto() da camada DAL;

public void excluiProduto(Produto produto){

try{

dal = new produtoDAL();

dal.deleteProduto(produto);

}catch (Exception ex) {

throw ex;

}

}

Não estamos efetuando nenhuma validação de negócio
nessas classes devido à simplicidade do exemplo, mas em um sistema de produção
aqui teríamos as validações referentes ao negócio como restrições de valores,
cálculo de impostos, descontos, etc.

Dessa forma concluímos a defnição do código da
nossa camada de negócios – BLL – através da implementação dos métodos da
classe produtoBLL.

c_mysql23.gif

Em um próximo artigo vamos continuar o assunto, definindo como acessar e apresentar as informações na camada de apresentação – BLL

Eu sei, é apenas Visual C#, mas eu gosto…