Guia Spring Framework

Como projetar aplicações com Spring e AngularJS para a nuvem

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (9)  (1)

Aprenda neste artigo como projetar a arquitetura de uma aplicação para a nuvem utilizando Spring Boot e AngularJS.

Fique por dentro
Este artigo apresenta uma proposta de arquitetura para aplicações web com foco principalmente em produtividade e escalabilidade, sem deixar de lado a segurança. Para isso, a arquitetura está baseada em dois frameworks de grande relevância no mercado, documentação vasta e suporte das comunidades: AngularJS e Spring. O primeiro é inteiramente desenvolvido em JavaScript e executa 100% no lado cliente, reduzindo a capacidade de processamento necessária do lado servidor. O segundo é um framework Java para aplicações web extremamente dinâmico e fácil de usar. Essas características permitem entregar uma solução altamente escalável e que pode ser utilizada em praticamente qualquer solução web.

No desenvolvimento de aplicações, seja para web, desktop ou dispositivos móveis, além de todos os requisitos funcionais, a equipe de desenvolvimento precisa se preocupar também com requisitos não funcionais, como segurança, desempenho e escalabilidade, itens esses que constituem o alicerce da aplicação e que, na maioria dos casos, precisam ser levados em consideração desde o início, sob a pena de ser necessário reconstruir toda a aplicação.

No entanto, a modelagem de uma arquitetura robusta, escalável, que permita à equipe alta produtividade, desenvolvimento ágil e que faça uso de recursos de infraestrutura da nuvem em seu favor demanda tempo e tem impacto no orçamento do projeto. Esses itens (tempo e orçamento) nem sempre estão disponíveis, principalmente para quem está desenvolvendo uma aplicação como hobby e para pequenas startups. Por outro lado, o tempo e o dinheiro investidos nessa etapa reduzem o prazo e simplificam o desenvolvimento e a manutenção. Além disso, criar uma estrutura a partir do zero ou com pouquíssimo material prévio para cada novo projeto é moroso e improdutivo.

Uma das primeiras e mais difíceis tarefas quando se está iniciando um novo projeto é a escolha das tecnologias que serão utilizadas. Isso porque, com raras exceções, essas decisões acompanharão o projeto por toda a sua vida e mudar a tecnologia utilizada normalmente sai caro. E quando o assunto são as tecnologias que servirão de base para o projeto, isso inclui linguagens, plataformas utilizadas, servidor de aplicações, o modo de armazenamento dos dados, entre outros itens funcionais e não funcionais que merecem atenção.

Felizmente, é possível que uma mesma implementação de arquitetura sirva como referência para outras aplicações ou mesmo que seja reutilizada integralmente pela maioria das aplicações web. E é isso que este artigo irá mostrar: uma proposta de arquitetura que pode ser utilizada no modelo mais comum de desenvolvimento web, que se apoia em frameworks e ferramentas consolidadas e que está pronta para ser implantada na nuvem. A intenção aqui não é apresentar a “arquitetura definitiva para aplicações web”, mas sim um conjunto de soluções de problemas comuns a esse tipo de desenvolvimento, além de fornecer conhecimento para que os desenvolvedores possam adaptar as ideias às suas necessidades e aos requisitos dos seus projetos.

Frameworks

Frameworks são conjuntos de abstrações de códigos e estruturas genéricas que devem servir como suporte para uma complementação que possa criar funcionalidades específicas. Os frameworks são responsáveis por comandar o fluxo de execução das aplicações ou atividades. Não os confunda com bibliotecas, que são códigos completos que não ditam o fluxo da aplicação e não precisam de complementação para funcionar. Neste artigo serão utilizados dois frameworks de grande penetração no mercado, vasta documentação e amplo suporte da comunidade: AngularJS e Spring.

O desenvolvimento para web por muito tempo esbarrou em problemas de compatibilidade entre navegadores, quando utilizar JavaScript muitas vezes trazia mais problemas que soluções. No entanto, isso mudou bastante com o surgimento de bibliotecas como o jQuery e frameworks como o Dojo. Foi nessa onda que surgiu o AngularJS, framework JavaScript mantido principalmente pelo Google e usado para o desenvolvimento de aplicações web ricas, seguindo a arquitetura MVW (Model-View-Whatever). Os padrões arquiteturais normalmente utilizados nas aplicações front-end são MVC (Model-View-Controller), MVP (Model-View-Presenter) e MVVM (Model-View-ViewModel). Como o AngularJS funciona bem com todos eles, a equipe cunhou o termo MVW, que significa algo como Model-View-e o que funcionar no seu projeto.

Em resumo, o AngularJS estende as funcionalidades do HTML para simplificar e agilizar o desenvolvimento no lado cliente, permitindo a rápida criação de aplicações com excelente usabilidade, além de abstrair e facilitar o uso de recursos importantes, como chamadas a APIs REST e controle do fluxo de páginas.

Do lado servidor, a grande preocupação da maioria dos frameworks sempre foi fornecer ao desenvolvedor toda a infraestrutura possível para que ele pudesse manter o foco na codificação de funcionalidades importantes para o negócio e simplesmente utilizar recursos como segurança e controle transacional. Esse foi, desde o início, o grande apelo dos EJBs, mas a infraestrutura de servidor de aplicações e o ambiente pesado os mantiveram no mundo das grandes aplicações corporativas. O Spring Framework traz todos esses recursos em um ambiente muito mais leve, simples e acessível, permitindo que possa ser utilizado em praticamente qualquer aplicação.

Arquitetura

A arquitetura de um sistema computacional ou de uma aplicação diz respeito aos elementos que servem de base para a sua construção e como esses interagem entre si para satisfazer as necessidades de funcionamento, desempenho, segurança e usabilidade. É o tópico que trata das decisões de design que guiarão o desenvolvimento e o andamento do projeto.

Entre os requisitos não funcionais que devem ser observados pela arquitetura estão a reusabilidade e a escalabilidade. A primeira existe somente em tempo de desenvolvimento e trata da capacidade dos componentes de serem reutilizados (sejam métodos, classes ou serviços). Esse item impacta diretamente o desenvolvimento e a manutenção uma vez que, quanto maior a reusabilidade, menor a quantidade de código a ser escrito e mantido e mais simples será a aplicação. Já a escalabilidade só faz sentido em tempo de execução e refere-se à capacidade do sistema ou aplicação de suportar o crescimento de trabalho de maneira uniforme, preferencialmente com o menor esforço possível.

O que será mostrado aqui é uma forma de utilizar esses conceitos na prática, com técnicas e padrões de projeto dos quais a equipe poderá se beneficiar, de acordo com os requisitos e necessidades do projeto.

Proposta

A proposta de arquitetura apresentada neste artigo está dividida em duas partes, bastante conhecidas pelos desenvolvedores: front-end e back-end. O front-end é a camada que interage com o usuário e, assim sendo, é nela onde são aplicados os conceitos de usabilidade e estética para que a aplicação seja bonita e simples. O back-end, por sua vez, é a camada responsável por executar as funcionalidades associadas ao negócio da aplicação e, dessa forma, é nela que são implementadas as regras de validação e execução, a persistência dos dados e as integrações com outros sistemas.

A ideia é que as duas camadas sejam desacopladas fisicamente, como se fossem duas aplicações implantadas em estruturas diferentes e utilizando recursos diferentes. A aplicação AngularJS é o cliente, e comporta as páginas HTML, os arquivos JavaScript, as imagens e outros recursos, que serão providos por um servidor de arquivos comum, como o Apache, NGiNX ou outro que esteja" [...]

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Ficou com alguma dúvida?