Na introdução, foram definidos o ambiente de trabalho e requisitos do Sistema Agenda Telefônica on-line. Agora vamos definir o ambiente de desenvolvimento da aplicação no Visual Studio. Lembre-se que será definido em camadas. É comum definir um único Project no Visual Studio e criar pastas dentro deste projeto para definir os DAO´s, BO´s e DTO´s, etc. Faremos um pouco diferente. Vamos criar uma ‘Solution’ e, nela, adicionaremos projetos que irão acomodar os objetos das camadas.
Criar a solução…
Agora vamos adicionar projetos a nossa solução. Vamos adicionar inicialmente 4 projetos:
- AgendaTelefonica.OR – Para acomodar os objetos de transferência de dados (DTO´s). Neste projeto iremos adicionar as classe e os arquivos de mapeamento do NHibernate com o banco de dados;
- AgendaTelefonica.Interface – Para acomodar as classes de interface dos DAO´s e dos BO´s. Internamente haverá duas pastas, DAO e BO, que acomodará as interfaces respectivas.
- AgenteTelefonica.DAO – Para acomodar os DAO´s;
- AgendaTelefonica.BO – Para acomodar os objetos de negócio.
Falta ainda adicionar um último projeto que é exatamente a aplicação web; o site por onde o usuário irá acessar o nosso sistema. Mas vamos deixar isso para o final.
Adicionando os projetos…
Após ter criado projeto de interfaces, crie duas pastas: DAO e BO. Até o momento o Solution Explorer deve estar assim:
Ao final da criação dos projetos o Solution Explorer deve estar assim:
Antes do próximo passo é necessário lembrar alguns conceitos.
- A biblioteca AgendaTelefonica.OR receberá os arquivos de mapeamento de Objetos Relacionais do NHibernate. Funcionará como DTO´s, ou seja, este objetos trafegarão livremente entre as camadas levando e trazendo informações. Portanto todas as outras bibliotecas, inclusive o site que ainda vamos criar, precisam “ver” essa biblioteca.
- A biblioteca de interface – AgendaTelefonica.Interface – será utilizada na declaração dos DAO´s e dos BO´s. Inclusive essas intefaces tem uma utilidade importante que é desacoplar as camadas no sistema e ajudar na escalabilidade. Inclusive, o instanciamento dos objetos das camadas deve ser através das suas interfaces. Isso garante o desacoplamento. Logo, todas a camadas de acesso a dados, negócio e a aplicação devem “ver” esta biblioteca.
- Uma hierarquia de acesso precisa ser obedecida na construção em camadas. A aplicação web ou desktop faz requisições somente à camada de negócio; representada pela biblioteca AgendaTelefonica.BO. As regras de negócios fazem requisições somente à camada de acesso a dados (AgendaTelefonica.DAO) que, por sua vez, acessa o banco de dados através de uma camada extra chamada Camada de Persistência que, no nosso sistemas, será responsabilidade do NHibernate. NUNCA e NUNCA MESMO, em camadas, essa hierarquia de acesso pode ser desobedecida. A camada superior faz requisições à camada imediatamente inferior e, esta, apenas responde as requisições. Em outras palavras, a camada superior executa um método de um objeto presente na camada inferior para realizar alguma operação e/ou receber alguma informação. Nunca ao contrário. Se em algum momento o DAO, por exemplo, fizer uma chamada ao BO, isso pode ser tudo. Menos arquitetura em camadas. Ou se, a aplicação web fizer uma chamada diretamente ao DAO pulando o BO, ou se o BO fizer um acesso ao banco de dados diretamente pulando o DAO, ou mesmo, se o DAO fizer chamada diretamente ao banco pulando a camada de persistência, em qualquer uma das situações a aplicação perde a característica do que nos chamamos ARQUITETURA EM CAMADAS.
No Visual Studio é possível garantir a hierarquia de camadas. Teremos que adicionar a referência de um projeto em outro segundo o que foi discutido nos itens acima:
- Em AgendaTelefonica.Interface adicionamos referência ao projeto AgendaTelefonica.OR;
- Em AgendaTelefonica.DAO adicionamos referência aos projetos AgendaTelefonica.OR e AgendaTelefonica.Interface;
- Em AgendaTelefonica.BO, adicionamos referência a aos projetos AgendaTelefonica.OR, AgendaTelefonica.Interface e AgendaTelefonica.DAO;
Lembre-se: OR e Interface estão em todas as camadas por conta das suas características: transferência de dados e desacoplamento, respectivamente.
Como nosso DAO utilizará o NHibernate, adicione, inclusive, referência a ele em AgendaTelefonica.DAO. Localize a instalação que voce fez do RSClass – Gerador de Classes). Detalhe: adicione somente ao projeto DAO.
Para adicionar uma referência a um projeto voce deve clicar no botão direto do mouse sobre o projeto e selecionar Add Reference… Selecione a aba Projects e faça as adições ao projeto atualmente selecionado.
Depois de ter feito isso para cada projeto, adicione a referência do NHibernate ao projeto AgendaTelefonica.DAO. Clique no projeto com o botão direito, Selecione Add Reference…, selecione a aba Browse e localize o arquivo NHibernate.dll na pasta de instalação do programa RSCLass – Gerador de Classes. Esta instalação deve ter sido feita no primeiro post deste tutorial.
Como todas as referências adicionadas o Solution Explorer deve se apresentar assim:
Mais uma etapa cumprida. Nosso ambiente está pronto. Vimos como criar uma aplicação em camadas no Visual Studio respeitando a hierarquia.
Se voce adquiriu o RSClass – Gerador de Classes, na pasta de instalação, voce pode encontrar os arquivos deste tutorial gerados até aqui (PARTE II). No próximo capítulo iremos começar a criar os arquivos de cada projeto, iniciando pelo OR.