Arquitetura Web

Arquitetura Web Padrão

O diagrama seguinte mostra a sequencia básica de um processo de interação web. Os componentes da arquitura são divididos em 4 tipos: persistencia (laranja) , dominio (azul) integração (amarelo) e API padrão (não representado)

Ilustração 1: Arquitura web padrão

O papel do front-controller é normalmente desempenhado por um servlet que recebe todas as requisições a determinado recurso (configurável no web.xml). O front-controller determina então, por analise da requisição e estado do servidor(session, configurações ,etc…) qual comando deverá ser executado. O contexto da requisição é encapsulado e passado à execução do comando. Após a execução do comando o estado do contexto será consultado para determinar se ha necessidade de um redirecionamento de págin ou não. Se sim, será criada uma requisição de redirecionamento pelo próprio front-controler.

O comando é então livre de executar qualquer tipo de logica. Para logicas de acesso ao dominio como seja a execução de serviços e/ou processos o comando analisa o contexto e determina qual método invocar e com quais parametros. Para facilitar o padrão Façade é utilizado neste ponto afim de separar a camada de controle web da camada de dominio. O comando tem então o papel de agregar informações e convertê-las para objetos que o Façade entenda. De notar que pode existir mais do que um Façade no sistema. Quando o comando receber a resposta do Façade ele alterará o estado do contexto.

O Façade é então livre de executar invocações a diferentes serviços do dominio de forma a completar o processo requisitado. A resposta do processo será devolvida ao comando.

Alguns dos serviços invocaram outros serviços, e algums invocarão operações no repositorio. O repositorio é um centralizador de consultas interessantes ao dominio. Ele pode também exercer o papel de modificador do dominio atravez de métodos que alteração como persistSomething().

O repositorio tem a responsabilidade de criar consultas ao real local de permanencia dos dados. Para abstrair a localização dos dados é utilizado um objeto no padrão DAO. Para que não haja dependencoa da tecnologia de persistencia os dados têm que ser passados ao DAO de forma independente da tecnologia de persistencia. Em particular, para a execução de consultas são usados objetos que implementam o padrão Query Object. Estes objetos pode ser, desde, simples pojos com os parametros da pesquisa, até , objetos complexos que simulam uma linguagem de pesquisa. A escolha depende de quão genérico é o DAO e quão desacoplado é do Repositorio e do resto da aplicação.

Arquitetura com Domain Store

Um padrão atualmente utilizado é a utilização de um Domain Store em vez de DAO directamente. O Domain Store oferece todas as vantagens de um DAO comum , conjuntamente com mecanismos de pesquisa baseados em Query Object e adiciona mecanismo de controle de estado e lazy loading. Ou seja, oferece capacidades de gerenciamento para objetos persistentes muito além do que um DAO simples conseguíria.

A arquitetura é semelhante em termos de passos na sequência, sendo o DAO subsituido pelo Domain Storage. O repositorio usa agora os Query Object do Domain Store em vez daqueles do DAO.

Arquitetura com Domain Store de mercado

Hoje em dia existem duas implementações do padrão Domain Store que podem ser utilizadas em aplicações de mercado. A primeira é a forma padronizada pelo JCP na forma da Java Persistence API (JPA). À semelhança da API JDBC a JPA define um conjunto de interfaces e mecanismos no padrão Bridge. Vendedores podem fornecer duas implementações deste padrão na forma de drivers.

Um outra foma menos padronizada mas mais popular é o uso directo do Hibernate. O Hibernate é uma implementação do padrão Domain Store que não segue o padrão JPA. Contudo, o Hibernate fornece uma implementação do driver da JPA e pode ser usando como implementação real dessa especificação. As funções avançadas como o suporte a Criteria ( uma implementação de Query Object completamente OO e não baseada em texto como a SQL ou a HSQL) fazem do Hibernate uma opção real ao uso da PJA por prover mais funcionalidade.

O uso de JPA ou Hibernate como Domain Store é um passo além do uso do DAO. A sua integração na arquitetura padrão consiste na simples troca do DAO por essas tecnologias. Não na criação de um DAO que encapsule essas funcionalidades, como pode parecer à primeira vista.

Em particular, como o uso de Hibernate, e conforme a complexidade do modelo de dominio, pode ser necessário recorrer a padrões complementares em particular o padrão “Open state in view ” que é necessário para o bom funcionamento das capacidades de lazy-loading do Hibernate e com isso diminuição de uso de recursos e aumento de performance. Normalmente isso é feito por meio de um filtro adicionado ao servlet que funciona como front-controler. Este tipo de alterações da arquitura padrão mostram que o uso de um Domain Store pode influenciar outras camadas da arquitura além da camada de persistencia e é um ponto a ser considerado antes da escolha por Hibernate seja feita.

Arquitetura com framework web

Os framework web tradicionais visam implementar de forma genérica a primeira parte da arquitura: o front-controler e o command. Os frameworks oferencem implementações para estes padrões e fornecem alguma forma de configuração que os torna aptos a serem usados em diversos sistemas. O framework mais conhecido neste tipo de padrão talvez seja o Struts, mas outros como Mentawai , o VRaptor ou o Spring Web MVC existem.

Licença

Creative Commons License Sérgio Taborda
Este trabalho é licenciado sob a
Licença Creative Commons Atribuição-Uso Não-Comercial-Não a obras derivadas 3.0 Genérica .

Deixe uma Resposta

Please log in using one of these methods to post your comment:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s