Organizando o projeto em camada


por Mauricio Junior em 1/1/2011 0

Olá pessoal, gostaria de mostrar com este artigo como organizar o código reaproveitando métodos, funções e tudo mais. Separar em projetos, usar DAO, DTO e BRL. Nunca faça tudo direto no código desorganizado; o sistema vai acabar aumentando e precisando de muita alteração no caso da falta de organização.

 

Referência:

- Ferramenta de desenvolvimento Visual Studio.NET 2008 ou superior;

- Linguagem C#, VB.NET ou J# (essa organização pode ser feita em qualquer linguagem dentro da ferramenta);

 

Breve explicação

 

         Não vou mostrar muito código com este artigo, vou mostrar apenas uma organização legal para desenvolvimento de software e reaproveitamento. O primeiro exemplo que vou comentar é sobre desenvolver um sistema do tipo Web. A parte do layout sempre vai acessar a parte de negócio e o negócio sempre acessa a camada de dados. Nunca o layout poderá acessar diretamente a camada de dados.

         Layout significa arquivo .aspx, .asmx, .js, .css, .vb, .html, e outros. Isso tudo é layout do sistema. O mesmo nunca deve ter regra de negócio, a regra deve ser feita dentro da BRL. Não confunda regra de tela com regra de negócio, a regra de tela pode ser feita de várias formas e jeitos.

         A regra de negócio sempre acessa a camada de dados, método sem regra de negócio faz apenas um chamada; caso contrário, executa a regra de negócio e depois acessa a camada de dados.

         A camada de dados apenas acessa os dados, não importa que tipo seja a base, SqlServer, Oracle, MySql, SQL Mobile, Acess, Sybase, Txt, XML ou outros. A função da camada de dados é apenas, inserir, excluir, atualizar e buscar os dados da base seja qual for.

         O envio e recebimento de parâmetro usando DTO (uma classe cheia de propriedades get e set) é no meu ponto de vista a melhor forma, dependendo do caso. Utilizo para passar como parâmetro de entrada. Você pode escolher também para enviar e receber; o melhor mesmo é enviar um DTO e receber outro DTO. Muitas vezes, já que não tem integração com outra linguagem como Java, retorno DataTable, DataSet que é um tipo de dados do C#.NET; depende muito do sistema.

 

Na Prática

 

         Na criação do projeto Web, gerei primeiro o nome e depois coloquei .Web. Por exemplo: NomeDoProjeto.Web. Esse foi o nome do projeto, isto é, do arquivo .csproj ou .vbproj. Automaticamente esse é o mesmo nome do namespace. Tenho apenas os arquivos de layout. (Imagem 1)

 

Imagem 1

 

         Note que, nesse projeto tenho apenas os arquivos .aspx, .master, .js, .css, .skin, imagens e tudo mais. Depois de criar esse projeto, criei outro chamado Business. Lembrando que isso é só uma sugestão para organização de código.

         Na próxima imagem (imagem 2), mostra o código Business.

 

Imagem 2

 

         Dentro da mesma solução, criei um projeto com o mesmo nome, porém referenciando o Business. Por exemplo: NomeDoProjeto.Web.Business. Na imagem 2, mostro as pastas BRL, DAO, DTO, LINQObjects e outros. O importante para este artigo são as pastas BRL, DAO e DTO.

         Ao abrir cada pasta, existem apenas arquivos com o final igual ao respectivo nome da pasta, por exemplo: PassadaDAO.cs, PassadaBRL.cs, PassadaDTO.cs.

 

Imagem 3

 

         Toda BRL recebe como parâmetro a DTO e acessa a classe DAO. É um padrão seguido para organização do código. A regra de negócio fica dentro da BRL, caso necessite da mesma. No caso de não ter regra, chamo o método da classe DAO e retorna, fica como se fosse um transportador. Code 1.1

 

 

        public void IncluirArquivo(Arquivo arquivo)

        {

            this._arquivoDAO.IncluirArquivo(arquivo);

        }

 

Code 1.1

 

         O code 1.1 mostra a DAO sendo chamada e acessando o método IncluirArquivo passando a classe Arquivo como parâmetro.

 

   

    public partial class Arquivo

    {

        public DateTime DataMovimento { get; set; }

    }

Code 1.2

         A classe Arquivo tem uma propriedade com get e set chamada DataMovimento e do tipo DateTime. As classes DAO sempre vão estender de outra classe responsável pela conexão com o banco de dados. No meu caso, chamei-a de BaseDAO.cs. (Imagem 4)

 

Imagem 4

         Outro segredo que uso também dentro das classes DAO é o internal classe em vez de ser public. Code 1.3.

 

 

internal DataTable PesquisaPoloCaptura(Passada passada)

        {

            StringBuilder query = new StringBuilder();

            query.Append(" SELECT...

Code 1.3

 

         Segue acima, a metade de um método da DAO.

         Dentro da BRL, faço apenas uma instância e utilizo o método que preciso. Pode ser usado também, um public interface, que possui apenas a assinatura do método. Para não aumentar muito o artigo, segue um link falando um pouco mais sobre public interface (http://www.aspneti.com/usando+public+interface+677,0.aspx).

         Tendo organizado as classes e o projeto dessa maneira mostrada; posso utilizar WebService. A interface é o arquivo .asmx e acessa a BRL que acessa a DAO. Fica tudo em um projeto Business que pode ser aproveitado.

         Muitas pessoas utilizam vários projetos dentro de uma mesma solução, no meu ponto de vista, fica mais difícil e complicado quando se trabalha em equipe gerenciar esse tipo de coisa. Fora as referências em vários projetos.

         Se eu quiser utilizar ou reaproveitar o projeto Business em um projeto do tipo WindowsForm, fica muito fácil e rápido. O que muda no final é apenas o layout para o cliente, ou seja, a camada fica separada.

 

Bom, eu fico por aqui; sou o Mauricio Junior.

Qualquer dúvida, entrar em contato pelo site.

voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Gerando Relatório e Exportando para o Excel Com Visual Studio.Net 2005
Acessando banco de dados com pocket pc
ASP.NET MVC
Sair da tela clicando ESC no Windows Forms
Gerando word com Visual Studio.NET 2005
II Encontro .NET em Brasília
GridView Parte II
Resources como padrão de mensagens
Criando Teclas de Atalho no Windows Form
Sistema de Controle de Gasolina Mobile - iGas
Vídeo: Imagem Efeito
Problemas na acentuação
Trabalhando com Session
Sistema ASP 3.0 utilizando 3 camadas – Parte 1
Arrumando seu Desktop
Vídeos Online Gratuitos
Criando Help com Visual Studio.NET
Escrever log de erro e warning
Visual Studio 11 – Novas funcionalidades e melhorias parte 3
Dica para acrescentar valor
Innovation Days
Vídeo - iGas - Sistema de Gasolina Mobile
Deletando todos os arquivos
Encontrar o valor no texto
Comando para compilação .NET
Novo SO Palm, depois da venda...
LG Optimus 7 com Windows Phone 7
Vírus - Telegrama Eletrônico
Web abrindo aplicações locais
User Control Windows executando no Internet Explorer (parte 2 de 2)
Promo Code do Livro CSharp .NET para Web
Generics usando Object DataSource
Nova forma de utilizar cache utilizando Visual Studio.NET 2005
Usando Tooltip
Limpando Cache do Brownser