Capítulo 1

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:

  1. 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;
  2. 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.
  3. AgenteTelefonica.DAO – Para acomodar os DAO´s;
  4. 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.

  1. 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.
  2. 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.
  3. 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:

  1. Em AgendaTelefonica.Interface adicionamos referência ao projeto AgendaTelefonica.OR;
  2. Em AgendaTelefonica.DAO adicionamos referência aos projetos AgendaTelefonica.OR e AgendaTelefonica.Interface;
  3. 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.