quarta-feira, 12 de março de 2014

Uma arquitetura diluída: Camada de apresentação


Bem, chegamos ao último artigo dessa série, que mostra uma opção de arquitetura diluída para aplicações corporativas. Agora, vamos ver a camada de apresentação, toda feita em HTML5 usando jQuery para consumir um RESTful webservice.




Camada de apresentação

Nossa aplicação exemplo está pronta! É claro que eu não implementei tudo... Faltam alguns métodos, mas ela está fazendo "logon" e pegando as mensagens. Eis a aplicação rodando no Browser:

Nesse exemplo, eu acessei a página "index.html", fiz "logon", informando meu "username" e "password", e ele mostrou a lista de mensagens para o meu usuário. As minhas e as das pessoas que estou "seguindo".

Falta fazer alguma coisa:

  • Cadastramento de usuário;
  • Opção de seguir e deixar de seguir usuários;
  • Um script para limpar as sessões antigas.
Mas isso, vou deixar para você fazer. A ideia é mostrar uma alternativa mais leve, desacoplada e diluída da aplicação Microblog, que eu desenvolvi com Java EE / JSF e JPA / Hibernate. 

Todo o "Set list" dessa série mostra as etapas de criação dessa aplicação, desde a Persistência até agora. 


A camada de apresentação fala diretamente com o RESTful Webservice, usando JSON como mecanismo de troca de informações. O gerenciamento do estado é feito através do objeto "sessao", que é recuperado do Banco de Dados MongoDB. O Webservice é totalmente "stateless".

Eu coloquei a página html dentro do zip da aplicação, mas, na verdade, ela pode ficar em qualquer lugar, por exemplo, em um Web server apache, sem problema algum.

A persistência é toda feita usando MongoDB, sem JDBC, sem JPA, sem Hibernate, ou seja, totalmente usando objetos JSON. A camada de lógica de negócios é atendida por um RESTful Webservice, feito em Java usando Jersey (JAX-RS), e roda em um Container Jetty embutido e auto configurado. Você pode subir quantas instâncias quiser, em VMs separadas.

Finalmente, a camada de apresentação pode rodar EM QUALQUER PLATAFORMA! Você pode adaptar o código HTML 5 para usar Apache Cordova, por exemplo, e rodar em qualquer ambiente mobile (Android, iOS ou Windows Phone), ou pode até criar uma aplicação Rails ou PHP para isso. Não importa! Não há "acoplamento de plataforma", e as funcionalidades estão diluídas em várias camadas fracamente acopladas.

Eis o "Snippet Gist" da página HTML (note que não está completa, mas faz o básico):



E há um projeto completo no Github. Você pode clonar o repositório ou baixar diretamente um arquivo ZIP com o projeto todo. Ele foi feito com Apache Maven e você pode compilar em qualquer IDE (ou até mesmo sem IDE).

Eis o "pom.xml" para você ver as dependências:


Para rodar, você precisa baixar o MongoDB. No projeto, há um test case (TestDaoInsert.java) que cria todos os registros que você possa necessitar.

Conclusão

Essa foi apenas uma das maneiras de "Balançar a Árvore". Poderíamos, por exemplo, substituir o RESTful Webservice por um script Node.js / Express, descartando completamente o Java e o Java EE. Porém, como eu disse anteriormente, todos nós investimos muito tempo e dinheiro na plataforma Java, e partir para uma solução radical, pode ser um "tiro no pé". Talvez, uma solução mais diluída, como essa, possa abrir os caminhos para arquiteturas ainda mais simples e diluídas.

O termo "arquitetura diluída" significa que estamos diluindo o risco, ao invés de concentrar tudo em um "castelo", como um Container Java EE, estamos diluindo as responsabilidades pelos vários nós, usando soluções mais simples.