Visual Studio + NHibernate: Construindo aplicações em camadas – (cont. II)

No post, anterior 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 qué é 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 este projeto, 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 precisamos 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, instanciamento dos objetos das camadas deve ser através das suas intefaces. Isso garante o desacoplamento. Logo todas a camada 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 soment à 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 à cada 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 camada. 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 as 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 a AgendaTelefonica.OR;
  2. Em AgendaTelefonica.DAO adicionamos referência a AgendaTelefonica.OR e AgendaTelefonica.Interface;
  3. Em AgendaTelefonica.BO Adicionamos referência a AgendaTelefonica.OR, AgendaTelefonica.Interface e AgendaTelefonica.DAO;

Lembre-se: OR e Interface estão em todas pelas suas características: Transferência de dados para OR e desacoplamento para Interface.

Como nosso DAO utilizará o NHibernate voce deve adicionar em AgendaTelefonica.DAO referrência ao NHibernate também (localize a instalação que voce fez do RSClass – Gerador de Classes). Detalhe: adicione somente no 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 referência do NHibernate a 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 ‘Bibliotecas’ localizada 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:

Pronto. Mais uma etapa cumprida. Nosso ambiente está pronto. Vimos como criar uma aplicação em camadas no Visual Studio respeitando a hierarquia. Registrem comentários e dúvidas.

Na página http://tutorialagendatelefonica.googlecode.com voce pode encontrar os arquivos deste tutorial gerados até aqui (PARTE II). No próximo post iremos começar a criar os arquivos de cada projeto, iniciando pelo OR.

Até o próximo.

2 Respostas para “Visual Studio + NHibernate: Construindo aplicações em camadas – (cont. II)”


  1. 1 Tedesco 30.09.2009 às 7:01

    Reginaldo.

    Inicei meus estudos no NHibernate (usava dOOdads) e gostaria de obter o fonte completo do seu projeto ‘AgendaTelefonica’, se vc pensar ser possível. Tive dúvidas na utilização dos scripts MyGeneration pois não consegui criar um relacionamento entre eles (pelo nome) e as camadas no VS…

    [][], Tedesco

    • 2 André Christófaro 14.10.2009 às 19:16

      Tedesco,

      Segui o seu post e consegui montar uma aplicação ASP.NET sem maiores dificuldade. Entretanto, peguei uma série de erros que resolvi com alguns post’s na Internet.
      Só que quando tento executar um comando simples de “Listar” dados em uma tabela no MSSQL Server 2005 o Hibernate exibe uma “exception” veja abaixo:
      Chamada no ASP.NET
      using SDE.OR;
      using SDE.BO;

      namespace SDE.Web.Register
      {
      public partial class Default : System.Web.UI.Page
      {
      protected void Page_Load(object sender, EventArgs e)
      {
      IList users = BOAccess.getBOFactory().UserBO().Listar(“Id”);
      this.grdUser.DataSource = users;
      this.grdUser.DataBind();
      }
      }
      }

      Erro retornado:
      {“could not execute query\r\n[ SELECT this_.id as id0_0_, this_.name as name0_0_, this_.age as age0_0_ FROM User this_ ORDER BY this_.id asc ]}

      Como faço para resolver isto?

      Obrigado!
      André


Deixe uma resposta




Categorias

Arquivos

Calendário

Junho 2008
D S T Q Q S S
« Mar   Jul »
1234567
891011121314
15161718192021
22232425262728
2930  

Desde (04/11/07)

  • 44,447 visitas