Organizando o projeto em camada
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.
Sign up to our newsletter
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.