Uma arquitetura de Software para estruturar aplicações web

Propaganda
Uma arquitetura de Software para estruturar aplicações web complexas
Resumo
Neste artigo é apresentada uma arquitetura para construir famílias de aplicações web
complexas. Primeiramente são caracterizadas as tendências para aplicações web, desde web
sites apenas para leitura de conteúdo até aplicações sofisticadas onde complexas transações
distribuídas devem ser suportadas.
Introdução
Construir aplicações web é uma tarefa complexa, pois essas aplicações quase
sempre agem como integradores de repositórios de dados e comportamentos distribuídos, e
usualmente devem suportar múltiplos perfis de usuários.
É preciso entender o domínio de aplicações subjacente: objetos, comportamentos,
regras de negócios e etc., e adotar arquiteturas de software flexíveis nesse domínio.
Engenharia sistemática e abordagens orientadas a reuso devem ser utilizadas.
Neste artigo é apresentada uma arquitetura baseada em componentes e um
framework de implementação para construir aplicações web complexas.
Princípios de design para aplicações web
Boas aplicações web devem ser primeiramente boas aplicações de hipermídia, pois
a Web é baseada no paradigma de hipertexto, e também é composta de páginas que podem
ser ligadas através de URLs. Deve-se utilizar boas práticas de design de hipermídia para
construir aplicações web que são fáceis de usar, que provêm espaços amigáveis de
navegação e que integram o comportamento transacional subjacente com a metáfora
provida pelos links navegacionais.
As mais maduras metodologias de design web reconhecem este fato e claramente
separam o design dos dados dos aspectos comportamentais da aplicação, dos aspectos
navegacionais e de interface. A clara separação de preocupações é reconhecida como chave
para se obter qualidade de design de reuso, assim como fácil evolução e manutenção.
Entretanto, em muitos casos esses benefícios são parcialmente perdidos durante a
implementação, devido ao pobre suporte para mecanismos de composição e abstração nas
plataformas de implementação existentes.
A arquitetura de software apresentada nesse artigo junto com um framework de
implementação permite melhorar o processo de mapear um esquema de design em uma
aplicação Web. A arquitetura suporta e encoraja o uso de uma série de princípios de design
providos pela maioria das metodologias, e implementa eles no contexto da arquitetura
J2EE, melhorando portanto, as abordagens existentes para o uso de J2EE. Os principais
princípios são:
-
As aplicações devem ser construídas usando-se camadas nas quais diferentes
preocupações são levadas em conta, em particular, dados da aplicação devem ser
separados dos conteúdos das páginas e estes conteúdos devem ser claramente
separados da aparência das paginas.
-
As páginas devem representar visualizações lógicas dos objetos de domínio,
permitindo a construção de aplicações personalizadas de acordo com o perfil do
usuário simplesmente mudando as visualizações ao invés dos objetos de
domínio.
Como ambiente de implementação, J2EE tem se tornado popular para implementação
de aplicações distribuídas de múltiplas camadas. A plataforma consiste de três camadas:
cliente, meio e EIS (Enterprise Information System). No nível de cliente pode-se ter uma
aplicação desktop ou um browser web, a camada EIS geralmente lida com a persistência,
enquanto a camada do meio lida com duas sub-camadas: o container web, onde são
distribuídas as páginas JSP e os servlets e o container EJB, onde são distribuídos os
componentes Enterprise Java Beans (EJBs), que implementam as regras de negócios.
Usar J2EE pode ser difícil, pois as responsabilidades de cada camada podem ser
distribuídas de forma incorreta. Entretanto, se for utilizada uma arquitetura de software,
como MVC (Model-View-Controller), evita-se deixar a maioria das decisões de arquitetura
para o programador e o processo é simplificado.
Porque é necessário utilizar uma arquitetura de software?
A evolução das plataformas de software para construção de aplicações web mostra
uma tendência para adoção de arquiteturas modulares, nas quais componentes de programa
e suas iterações seguem práticas estabelecidas de engenharia de software, como separação
de atribuições, bom suporte para evolução e etc.
Por exemplo, pode-se considerar o uso da arquitetura MVC para desacoplar a
interface com o usuário dos dados da aplicação e das duas funcionalidades.
O model contém os comportamentos de dados da aplicação, também provendo uma
interface entre a view e o controller. Para cada interface com o usuário, um objeto view é
definido, contendo informação sobre os formatos de apresentação, e é sincronizada com o
estado do model. Finalmente o controller processa as informações entradas pelo usuário e
traduz isso em requisições para funcionalidades específicas da aplicação. Esta separação
reflete bem o fato de as aplicações Web podem ter diferentes visualizações, no sentido de
que podem ser acessadas através de diferentes clientes como browsers, clientes de Web
Services, etc.
As vantagens de se utilizar uma abordagem arquitetural para construção de software
se tornam mais tangíveis quando se pode refinar a arquitetura em um conjunto de
arquiteturas mais detalhadas para aplicações de domínios específicos. Pode-se construir
diferentes frameworks de aplicação para cada domínio. O desenvolvimento de novas
aplicações vai apenas envolver a instanciação e a conexão entre componentes de
framework, ao invés de fazer tudo do zero.
A Arquitetura OOHDM-Java2 (Object-Oriented Hypermedia Design Model)
Limitações da arquitetura MVC
A arquitetura MVC oferece um conjunto de princípios estruturais para construção de
aplicações interativas modulares, mas não atende completamente aos requerimentos das
aplicações Web que devem oferecer ricas estruturas de hipermídia, pois é baseada em uma
visão de software puramente transacional. Pior de tudo, não leva em consideração os
aspectos de navegação que deveriam ser apropriadamente suportados.
Para resolver este problema foi proposta a criação de um nível navegacional que
encapsula toda a lógica de navegação. Enquanto a JSP é responsável pela estrutura de
layout da página, a camada navegacional gerencia os conteúdos das páginas e lida com as
informações específicas de contexto.
Visão da arquitetura OOHDM-Java2
A arquitetura Modelo para Design de Hipermídia Orientada a Objetos e o
framework arquitetural associado foi projetada e implementada com os seguintes objetivos:
-
Deve suportar e encorajar boas práticas de implementação e design;
-
Dever ser facilmente portável entre plataformas;
-
Deve ter dependências mínimas em linguagens de programação e/ou
ferramentas particulares;
-
Deve implementar as mais comuns abstrações utilizadas em aplicações web,
deixando o designer com a tarefa de apenas prover código específico da
aplicação;
-
Deve suportar a construção de aplicações web transacionais complexas;
-
Deve ser fácil de usar em aplicações apenas de leitura;
-
O reuso de componentes deve ser principalmente do tipo black-box (o designer
deve apenas conhecer a interface dos componentes arquiteturais).
OOHDM-Java2 estende a idéia do MVC por claramente separar as páginas de suas
interfaces, assim introduzindo a idéia de objeto de navegação, e também reconhece o fato
de que a navegação pode ser dependente de contexto.
Os principais componentes da arquitetura OOHDM-Java2 são:
-
HTTP-REQUEST Tradutor (Controller): Cada requisição http é direcionada
a esse componente. Ele então traduz a requisição do usuário em uma ação a ser
executada pelo modelo.
-
Executor (Controller): Este componente tem a responsabilidade de executar o
evento de negócios, invocando comportamentos do modelo seguindo alguma
lógica pré-definida.
-
Objeto
de
negócios
(Model):
este
componente
encasula
dados
e
funcionalidades específicas da aplicação. Todas as regras de negócio são
definidas nesses objetos e são disparadas pelo executor para executar um evento
de negócio.
-
Seletor de visualização (Controller): depois da execução de um evento de
negócio, esta componente pega o estado de certo objetos de negócio e seleciona
a visualização da resposta (interface).
-
Nó de navegação (Visualização Extendida): este componente representa o
produto da lógica navegacional da aplicação. Encasula atributos que foram
obtidos de alguns objetos de negócios e outros sub componentes como indexes,
ancoras, etc. Este componente tem os conteúdos a serem mostrados pela
interface de resposta (JSP).
-
JSP (Visualização estendida): este componente gera a aparência que o cliente
do componente recebe como resposta a sua requisição.
Adotando uma arquitetura específica de domínio
Um dos mais importantes benefícios de se usar uma abordagem centrada em
arquitetura é que isso melhorar reuso em larga escala de componentes de aplicação. Foi
introduzido o conceito de Web Design Frameworks (WDF) como “um modelo genérico e
reutilizável de aplicação Web em um domínio particular, que pode ser posteriormente
instanciado em aplicações específicas dentro daquele domínio”. Por exemplo, podemos
descrever a WDF para a área de e-commerce construindo um modelo conceitual genérico,
adicionando navegação genérica correspondente e modelos de interface e então refinar isso
para construir uma e-store particular.
A arquitetura OOHDM-Java2 permite mapear os modelos reusáveis de modelos de
aplicações em uma arquitetura de domínio específico em que os artefatos de design
genérico são implementados usando-se os componentes bases do framework.
Conclusões
Neste artigo foi apresentado a arquitetura OOHDM-Java2 e o seu framework
associado. A estrutura geral da arquitetura foi apresentada e implementa uma extensão do
modelo MVC e prove muitas características positivas para construção de aplicações Web.
Referência:
[1] Mark Douglas Jacyntho, Daniel Schwabe, Gustavo Rossi: A Software Architecture for
Structuring Complex Web Applications. Disponível em:
http://wwwconf.ecs.soton.ac.uk/archive/00000179/01/index.html
Download