Olá pessoal apaixonado por .NET, neste artigo faremos uma demonstração como criar uma aplicação utilizando o conceito de desenvolvimento em camadas.

Desde já gostaria de esclarecer que esse é um simples exemplo com o passo a passo da criação e implementação de funcionalidades em sua aplicação utilizando o desenvolvimento em camadas.

Para nosso exemplo utilizaremos o Visual Studio 2010, onde criaremos uma aplicação web utilizando como linguagem o C#.

Será um exemplo bem simples, onde o principal objetivo é demostrar desde a criação de vários projetos (camadas) e uma mesma Solution (aplicação) até o relacionamento e comunicação entre as camadas. Para nosso exemplo utilizaremos a metodologia de desenvolvimento em 3 camadas onde temos:

  • DAL – Camada de Acesso a dados(Data Access Layer);
  • BLL – Camada de Regra de negócios (Business Logic Layer);
  • UI – Camada de Apresentação (User Interface);

Segue abaixo uma imagem para ilustração do desenvolvimento em camadas:

Figura 01

Veja abaixo uma breve descrição sobre cada uma das camadas:

  • UI – Camada de Apresentação. Camada responsável por apresentar ao usuário o resultado final de todo o processamento de nosso sistema que se comunica somente com a BLL, não fazendo acesso direto à DAO.
  • BLL – Camada de Regra de Negócio. Camada responsável por possuir as regras especifica do sistema a ser desenvolvido, sendo responsável por se comunicar com a DAO (para acessar os dados retornados do banco) e fornecer informações à UI (para repassar o resultado do processamento e configuração das regras do sistema).
  • DAO – Camada de Acesso a Dados. Camada responsável se conectar e fazer todas as transações referentes a banco de dados, como consultas, inserções de dados, atualizações de dados e exclusão de dados. Essa camada faz a comunicação com a BL, não se comunicando diretamente com a UI.

Agora que conhecemos um pouco mais sobre o desenvolvimento em camada, vamos começar a desenvolver nosso exemplo. Para isso abra o seu Visual Studio...

Clique no menu File/New/Project. Agora vamos selecionar o tipo de nosso projeto. Selecione ASP.NET Web Application...

No exemplo colocamos o nome como AplicacaoEmCamadas, mas você pode colocar o nome que achar mais confortável para seu entendimento.

Figura 02

Clique em OK. Observe que será criada a Solution de nossa aplicação contendo um projeto Web, que será nossa camada de apresentação (UI).

Figura 03

Agora iremos criar nossos outros dois projetos (camadas). Para isso, clique com o botão direito do mouse no Solution de sua aplicação na aba Solution Explorer, vá a Add/New Project;

Selecione o tipo de projeto Class Library e mude o nome do nosso novo projeto para BLL:

Figura 04

Clique em OK. Agora seu projeto BLL foi criado como mostra a imagem abaixo:

Figura 05

Vamos criar nosso último projeto (camada) para nossa aplicação, a DAO.

Siga os passos anteriores, clique com o botão direito do mouse no Solution de seu projeto localizado no Solution Explorer. Vá em Add/New Project.

Selecione o tipo de projeto Class Library e altere no nome de seu novo projeto para DAO:

Figura 06

Clique em OK. Nosso último projeto que faltava ser inserido na aplicação foi criado, como mostra a imagem abaixo:

Figura 07

Relacionamento entre camadas

Já que toda a estrutura de nosso projeto foi criada, temos agora que fazer o relacionamento entre as camadas, para que uma possa ser visível pela outra.

Observe o diagrama abaixo que demostra como será o relacionamento entre elas:

Figura 08

Veja que o diagrama exibe o relacionamento que uma camada possui com a outra. Repare que a nossa camada UI (AplicacaoEmCamada) possui uma relação de dependência com BLL, e BLL possui um relacionamento de dependência com DAO.

Tendo entendido como será o relacionamento entre nossas camadas, vamos fazer os nossos relacionamentos.

Vamos fazer o relacionamento entre a camada UI e a BLL. Para isso clique com o botão direito do mouse na sua camada de interface (UI ou AplicacaoEmCamada), depois clique em Add Reference:

Figura 09

Selecione o seu projeto (camada) BLL:

Figura 10

Após isso clique em OK. Uma nova referência a nossa camada BLL será criada na camada UI, como mostra a imagem abaixo:

Figura 11

Agora adicionaremos uma nova referência de nossa camada BLL com a camada DAO. Para isso siga os passos mostrados anteriormente, clique com o botão direito do mouse na camada BLL, depois clique em Add Reference...

Selecione o projeto DAO na janela que aparecerá, como mostra a imagem abaixo:

Figura 12

Pronto, todas as referências necessárias foram criadas. Agora já pode começar a codificar.

Funcionalidade de teste

Agora que todas as nossas referências foram criadas, já pode começar a codificar.

Como se trata somente de um exemplo de como funciona o desenvolvimento em camadas não utilizaremos nenhum banco de dados, somente criaremos uma lista contendo alguns dados na nossa camada DAO e a mesma será explorada e manipulada pela camada BLL, que por sua vez irá repassar os dados para a camada de interface que apresentará o resultado.

Criaremos uma lista contendo a descrição dos estados brasileiros na camada DAO:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DAO
{
    public class Dao
    {
        public List<string> RetornaListaEstado()
        {
            List<string> listaEstados = new List<string>();
            listaEstados.Add("Acre");
            listaEstados.Add("Alagoas");
            listaEstados.Add("Alagoas");
            listaEstados.Add("Alagoas");
            listaEstados.Add("Amapá");
            listaEstados.Add("Amazonas");
            listaEstados.Add("Bahia");
            listaEstados.Add("Ceará");
            listaEstados.Add("Distrito Federal");
            listaEstados.Add("Distrito Federal");
            listaEstados.Add("Distrito Federal");
            listaEstados.Add("Espírito Santo");
            listaEstados.Add("Goiás");
            listaEstados.Add("Maranhão");
            listaEstados.Add("Mato Grosso");
            listaEstados.Add("Mato Grosso do Sul");
            listaEstados.Add("Minas Gerais");
            listaEstados.Add("Pará");
            listaEstados.Add("Paraíba");
            listaEstados.Add("Paraíba");
            listaEstados.Add("Paraíba");
            listaEstados.Add("Paraná");
            listaEstados.Add("Pernambuco");
            listaEstados.Add("Piauí");
            listaEstados.Add("Rio de Janeiro");
            listaEstados.Add("Rio Grande do Norte");
            listaEstados.Add("Rio Grande do Sul");
            listaEstados.Add("Rio Grande do Sul");
            listaEstados.Add("Rio Grande do Sul");
            listaEstados.Add("Rondônia");
            listaEstados.Add("Roraima");
            listaEstados.Add("Santa Catarina");
            listaEstados.Add("São Paulo");
            listaEstados.Add("São Paulo");
            listaEstados.Add("São Paulo");
            listaEstados.Add("Sergipe");
            listaEstados.Add("Tocantins");
            return listaEstados;
        }
    }
}

Nossa lista foi criada. Observe que existem alguns itens repetidos, isso foi de propósito e iremos tratar isso em nossa camada BLL.

Agora vamos chamar o nosso método com a lista de estados que está na classe Dao da camada DAO. Essa chamada será feita dentro da camada BLL:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
namespace BLL
{
    public class Bll
    {
        public List<string> RetornaEstadosTratados()
        {
            List<string> listaDosEstadosTratados = new List<string>();
            Dao classeDao = new Dao();
            listaDosEstadosTratados = classeDao.RetornaListaEstado().Distinct().ToList();
            return listaDosEstadosTratados;
        }
    }
}

Repare que colocamos uma diretiva Using para nossa camada DAO.

Agora vamos explicar o tratamento e chamada:

  • Crie uma nova lista que conterá objetos do tipo String;
  • Depois crie um objeto que faz referência a classe Dao que está dentro de nossa camada DAO, que é nossa camada de persistência;
  • Depois popule a lista ‘listaDosEstadosTratados’ com os dados retornados pelo método ‘RetornaListaEstado()’ que está na classe DAO da camada de persistência.
  • Reparem ainda que utilizamos o Distinct().ToList() e populamos a lista com os dados retornados por RetornaListaEstado(), que serve para retirar os itens repetidos de nossa coleção.

Agora vamos chamar na nossa UI (camada de interface) o nosso método que contém a lista tratada e que está na camada de negócios (BLL):


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BLL;
namespace AplicacaoEmCamadas
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Bll classeBll = new Bll();
            ddlListaEstados.DataSource = classeBll.RetornaEstadosTratados();
            ddlListaEstados.DataBind();
        }
    }
}

Repare que assim como anteriormente adicionamos uma diretiva using, agora para nossa camada BLL.

Foi muito simples o trabalho aqui. Primeiro crie um objeto que faz referência a classe Bll que está dentro de nossa camada BLL, que é nossa camada de Regra Negócio.

Depois popule um DropDownList criado na página com uma lista de dados retornados pelo meu método RetornaEstadosTratados, da classe Bll.

E eis o nosso resultado final. Como podem observar o nosso DropDownList foi populado com sucesso com os dados de nossa Lista:

Figura 16

O desenvolvimento em camadas é bastante utilizado nos dias atuais devido a sua praticidade e também devido a segurança que proporciona à aplicação, pois quando você subir sua aplicação para o servidor não precisará subir todas as camadas (projetos), apenas subirá a sua UI (camada de interface), as outras camadas estão em DLL na pasta Bin de sua camada de Apresentação.