Caro(a) Leitor(a), hoje vou falar um pouco como desenvolver software em camadas utilizando C# e Visual Studio 11 beta. Hoje existem vários padrões de desenvolvimento, inclusive você pode fazer o seu próprio modelo de desenvolvimento.

Mas para não ficar muito diferente dos demais, foram criados alguns padrões e esses podem ser utilizados em qualquer linguagem ou ferramenta de desenvolvimento. É importante dizer que, você pode escolher a forma que deseja trabalhar ou padronizar. Eu vou mostrar aqui a maneira que é mais utilizada dentre os desenvolvedores, talvez mude apenas o nome mas o princípio é o mesmo.

Tag: Visual Studio 11, C#, Camadas

VocĂŞ tem hoje várias possibilidades de acessar a internet utilizando dispositivos mĂłveis, computador, pocket PC, smartphone, TV, notebook e tablets. Essas interfaces podem ser mudadas de acordo com a necessidade de cada um, mas o que funciona por baixo nĂŁo precisa ser alterado (em tese) se for feito em camadas. 

Quero dizer que a mesma camada, por exemplo: a camada de acesso a dados pode ser usada por qualquer dispositivo citado anteriormente.

Junto das camadas, existe tambĂ©m a passagem de parâmetro do tipo padronizado, por exemplo: em vez de passar parâmetro por parâmetro, basta passar uma classe com Get e Set (cheio de propriedades) prefixadas. 

Vamos para a prática. O primeiro passo é, vamos criar as pastas dentro do projeto. Figura 1.

Figura 1: Criando pastas

        Para criar as pastas, cliquei com o botĂŁo direito em cima do projeto e comecei a criar as pastas especĂ­ficas de Code >> BLL >> DAL >> DTO. Figura 2.

Figura 2 – Pastas criadas



Note que dentro da pasta Code existem as outras funcionando como siglas. BLL >> DAL >> DTO.

BLL significa Business Logic Layer, responsável pela camada de regra de negĂłcio. A pasta DAL significa Data Access Layer, responsável pela camada de acesso a dados, como acesso ao banco de dados. É importante dizer que o banco de dados pode ser qualquer um. Dependendo da maneira que vocĂŞ cria a sua camada de acesso a dados, a qualquer momento o seu banco de dados pode ser alterado e a sua camada de conexĂŁo nĂŁo precisará alterar uma linha de cĂłdigo. 

Isso porque essa camada pode ter drives para todos os bancos de dados existentes de uma maneira simples. 

Depois de criar as pastas, vamos criar as classes especĂ­ficas. Lembro que hoje nĂŁo vou aprofundar muito no cĂłdigo, sĂł vou mostrar como criar.
DTO

Eu sempre começo pela DTO que na verdade é praticamente um espelho da tabela de banco de dados. Figura 3.

Figura 3 – Criando uma classe DTO.
Note que coloquei o nome da classe chamada ClienteDTO.cs. Depois de colocar o nome da classe cliquei no botão chamado ADD. A minha tabela do banco de dados tem o nome de Cliente e possui alguns campos como: Id, Nome, Email, Endereço, Cidade, Estado, Senha. Code 1.

Code 1 – Classe ClienteDTO.
[Code]
public class ClienteDTO
    {
        int _id;
        String _nome;
        String _endereco;
        String _email;
        String _cidade;
        String _estado;
        String _senha;

        public String Senha
        {
            get { return _senha; }
            set { _senha = value; }
        }

        public String Estado
        {
            get { return _estado; }
            set { _estado = value; }
        }

        public String Cidade
        {
            get { return _cidade; }
            set { _cidade = value; }
        }

        public String Email
        {
            get { return _email; }
            set { _email = value; }
        }

        public String Endereco
        {
            get { return _endereco; }
            set { _endereco = value; }
        }

        public String Nome
        {
            get { return _nome; }
            set { _nome = value; }
        }

        public int Id
        {
            get { return _id; }
            set { _id = value; }
        }
    }
[/Code]

Note que na classe eu tenho todos os get e set dos meus campos das tabelas. Em artigos passados mostrei como gerar esses get e sets usando tecla de atalho. 

DAL

O próximo passo foi criar uma classe DAL responsável por buscar no banco de dados. Code 2.

Code 2 – ClienteDAL.cs
[CODE]
    public class ClienteDAL
    {
        internal void selectCliente(ClienteDTO dto)
        {
            //acesso ao banco de dados
            //select passando os parâmetro dto

            StringBuilder str = new StringBuilder();
            str.Append(@" SELECT campos FROM Cliente WHERE campo = @valor ");
            string valor = dto.Email;
        }
    }
[/CODE]

Note que o meu método recebe como parâmetro a minha classe chamada ClienteDTO. Qualquer campo que quiser da minha classe basta clicar dto e digitar ponto que aparece todas as propriedades.

BLL
Para finalizar, vamos criar a classe BLL responsável pela regra de negócio e acesso único a camada DAL. Nenhuma outra classe acessa a DAL a não ser a BLL. Lembro que a sua interface web, form ou móvel acessa apenas a BLL onde tem toda regra de negócio.

A camada BLL Ă© responsável por acessar a DAL e tratar erro. Veja como ficou o cĂłdigo da classe ClienteBLL.cs.  Code 3.

Code 3 – ClienteBLL.cs chamando a classe DAL.
[CODE]
    public class ClienteBLL
    {
        protected ClienteDAL _clienteDAL;

        public ClienteBLL()
        {
            if (_clienteDAL == null)
                _clienteDAL = new ClienteDAL();
        }

        public void selectCliente(ClienteDTO dto)
        {
            try
            {
                _clienteDAL.selectCliente(dto);
            }
            catch (Exception ex)
            {
                //fazendo tratamento de erro
                tratarErro(ex);

                //jogando o erro para a camada superior.
                throw ex;
            }
        }
    }
[/CODE]

O primeiro passo foi criar a variável protegida da classe DAL. No construtor do método BLL verifiquei se alguém está utilizando a classe se houver ele não gera uma nova instância. Depois criei o método do tipo público passando como parâmetro a classe DTO de cliente.

Dentro do método selectCliente chamei a variável criada anteriormente e quando digitei o ponto, a ferramenta já me mostrou os métodos disponíveis. Só selecionei e passei a dto como parâmetro.

Note que na DAL nĂŁo existe o try e catch para pegar erro se houver. O tratamento de erro Ă© feito dentro da BLL. Veja como ficou as classes geradas. Figura 4.

Figura 4 – Classes geradas


Cada classe com seu respectivo nome e responsabilidade. Bom, espero que tenha gostado e em artigos futuros falo mais sobre cada classe. Qualquer dĂşvida pode entrar em contato pelo site pessoal www.mauriciojunior.org