Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
i
“Software is like entropy: It is difficult to grasp, weighs nothing, and obeys the Second Law of Thermodynamics;
i.e., it always increases.”
Norman Augustine
iii
Agradecimentos
Este trabalho foi o culminar de um ciclo de 5 anos de estudo, no fundo o ultrapassar de mais
uma etapa na minha vida académica, pessoal e profissional. As pessoas que me rodeiam no
dia-a-dia e que, de alguma forma, me ajudaram durante este longo período merecem sem
dúvida o meu reconhecimento.
Um agradecimento especial à minha namorada, por todo o apoio e companhia nas inúmeras
tarde de trabalho que, sem dúvida, permitiu a entrega desta dissertação dentro do prazo
estabelecido. A juntar a esta agradecimento é de salientar o apoio incondicional da minha
família, que sempre me incentivou e me proporcionou todas as condições necessárias para
terminar os meus estudos e ingressar no mundo profissional.
A nível profissional agradeço a todos os meus colegas da Vortal, que além das ajudas mais
técnicas me proporcionaram um ambiente de trabalho e companheirismo que me ajudou
nesta fase a vários níveis. Um agradecimento especial para o Rui Barreira pela ajuda na
elaboração da dissertação, pelas boas orientações que me concedeu e pela paciência nas
várias revisões de leitura da dissertação.
Ao meu orientador pelo apoio durante a realização da dissertação e por contribuir com
opiniões e ideias que me permitiram melhor o trabalho realizado.
À instituição de ensino, pela oportunidade concedida e por garantir todos os meios que
possibilitaram a realização desta dissertação.
Por fim, a todas as pessoas que de uma maneira ou de outra contribuíram para que esta
dissertação chegasse ao fim. O meu sincero agradecimento a todos.
v
Resumo
A evolução tecnológica das últimas décadas generalizou o uso de software para a substituição
ou suporte de múltiplos processos das empresas e, evidenciou novas perspectivas para o
desenvolvimento de soluções com altos níveis de performance, disponibilidade, escalabilidade
e flexibilidade. No contexto Vortal (empresa líder no mercado de contratação electrónica
português com a plataforma VortalNext>), esta generalização levou à necessidade da
existência mecanismos que permitam aos seus clientes a personalização/criação de áreas de
trabalho dedicadas.
Tendo esta necessidade como foco, são avaliados os diferentes componentes da plataforma
Next>, a metodologia de desenvolvimento atualmente utilizada (Model Driven Architecture) e
quais as melhores aproximações para o desenvolvimento de aplicações no âmbito de uma
plataforma web, focando as suas vantagens e desvantagens a nível arquitetural e aplicacional.
Concluiu-se que todas as soluções estudadas são adequados ao desenvolvimento de
aplicações web, sendo o seu grau de adequação variável com o contexto de utilização. São
soluções diferentes relativamente à complexidade de implementação, aos recursos
necessários, aos riscos envolvidos e à simplicidade de utilização por parte do grupo de
utilizadores finais.
Por fim, é apresentada a arquitetura de um Software Development Kit (são estudadas outras
opções, sendo esta a que oferece mais estabilidade aplicacional e mais vantagens
competitivas) e a sua integração no ecossistema aplicacional e arquitetural da
plataforma maximizando, não apenas a flexibilidade e funcionalidade para o cliente final, como
também a segurança, robustez e fiabilidade do ecossistema da plataforma. A arquitetura
definida em conjunto com o modelo de negócio apresentado formam a linha de ação indicada
para garantir a existência de aplicações personalizadas a serem executadas no ecossistema
VortalNext>.
Palavras-chave (Tema): Arquitetura de Software, Revisão, Reestruturação,
Modelação, Software Development Kit, Aplicações de
Terceiros, Model Driven Architecture.
vii
Abstract
The technological evolution of the last decades, widespread the use of software for the
replacement or support of many company processes and highlighted new perspectives for
developing solutions with high levels of performance, availability, scalability and flexibility. In
the case of Vortal (leader in the Portuguese e-procurement platforms with Vortal Next>), this
generalization led to the need of designing a tool that allows customers to customize/create
dedicated workspaces.
Focusing on this need, the different components of Vortal Next> platform are evaluated, the
currently used development methodology is studied (Model Driven Architecture) as well as what
are the best approaches for developing applications within a web platform, focusing on the
advantages and disadvantages at the architectural and applicational level.
It was concluded that all the solutions are suitable for the development of web applications,
having its degree of suitability to vary according with the context of use. They are different
solutions regarding the implementation complexity, the resources required, the risks involved
and the simplicity of use by the group of end users.
Finally, it is presented the architecture of a Software Development Kit (other options are
studied, but this is the one that offers more stability and more competitive advantages) and its
integration into the platform, maximizing not only the flexibility and functionality to the end
customer, but also the safety, robustness and reliability of the platform ecosystem. The
architecture defined along with the business model presented, form the line of action indicated
to ensure the existence of custom applications to be executed in the Vortal Next> ecosystem.
Keywords: Software Architecture, Revision, Restructuring,
Modeling, Software Development Kit, Third Party
Applications, Model Driven Architecture.
ix
ÍNDICE
1 INTRODUÇÃO ................................................................................................................................ 1
ENQUADRAMENTO ............................................................................................................................. 1
APRESENTAÇÃO DO TEMA .................................................................................................................... 4
OBJECTIVOS DA DISSERTAÇÃO .............................................................................................................. 5
ESTRUTURA DA DISSERTAÇÃO .............................................................................................................. 6
2 MODEL DRIVEN ARCHITETURE ........................................................................................................ 9
MÉTODO DE DESENVOLVIMENTO TRADICIONAL .......................................................................................... 9
MODEL DRIVEN ARCHITECTURE (MDA) ................................................................................................ 10
MODELOS ..................................................................................................................................... 11
PROCESSO DE DESENVOLVIMENTO ....................................................................................................... 11
Platform Independent Model (PIM) ........................................................................................ 12
Platform Specific Model (PSM) .............................................................................................. 13
Código Fonte ....................................................................................................................... 13
Domain Specific Language (DSL) .......................................................................................... 13
Exemplo – Do PIM ao Código ............................................................................................... 14
Tipos de Transformações ..................................................................................................... 15
FERRAMENTAS EXISTENTES ................................................................................................................ 16
VANTAGENS E DESVANTAGENS ............................................................................................................ 17
3 ARQUITETURA VORTAL NEXT> ....................................................................................................... 19
VISÃO GERAL DA ARQUITECTURA ......................................................................................................... 19
ARQUITETURA APLICACIONAL ............................................................................................................. 20
MODELOS EXISTENTES ..................................................................................................................... 21
TRANSFORMAÇÕES ENTRE MODELOS .................................................................................................... 23
PROBLEMAS DA ABORDAGEM/FERRAMENTA............................................................................................ 24
4 INTEGRAÇÃO DE APLICAÇÕES DE TERCEIROS ................................................................................. 25
APPLICATION PROGRAMMING INTERFACE ............................................................................................... 25
SOFTWARE DEVELOPMENT KITS .......................................................................................................... 28
DESENVOLVIMENTO BASEADO EM PLUG-INS ........................................................................................... 30
5 AVALIAÇÃO DAS POSSIBILIDADES .................................................................................................. 35
API’S BASEADAS EM REST ............................................................................................................... 35
Arquitetura e Escalabilidade ................................................................................................. 35
x
Facilidade de Desenvolvimento ............................................................................................. 37
Performance e Interoperabilidade ......................................................................................... 37
Time to Market .................................................................................................................... 38
Vantagem Competitiva ......................................................................................................... 38
SOFTWARE DEVELOPMENT KITS .......................................................................................................... 39
Arquitetura e Escalabilidade ................................................................................................. 39
Facilidade de Desenvolvimento ............................................................................................. 40
Performance e Interoperabilidade ......................................................................................... 40
Time to Market .................................................................................................................... 41
Vantagem Competitiva ......................................................................................................... 41
DESENVOLVIMENTO BASEADO EM PLUG-INS ............................................................................................ 42
Arquitetura e Escalabilidade ................................................................................................. 42
Facilidade de Desenvolvimento ............................................................................................. 42
Performance ....................................................................................................................... 43
Time to Market .................................................................................................................... 43
Vantagem Competitiva ......................................................................................................... 44
COMPARAÇÃO DAS ABORDAGENS ......................................................................................................... 44
6 VORTAL DEVELOPMENT SOFTWARE KIT .......................................................................................... 47
VISÃO GERAL DA ARQUITETURA ........................................................................................................... 47
“4+1” VIEW MODEL ....................................................................................................................... 49
VISTA DE CASOS DE USO .................................................................................................................. 50
PERSPETIVA DE DESENVOLVIMENTO ..................................................................................................... 52
PERSPECTIVA LÓGICA ....................................................................................................................... 53
Design Patterns ................................................................................................................... 53
Controlos do SDK ................................................................................................................ 54
Elementos gráficos ...................................................................................................................... 55
Ações ......................................................................................................................................... 58
DataSources ............................................................................................................................... 59
Páginas ...................................................................................................................................... 60
Vortal Development SDK ...................................................................................................... 62
Motor do SDK ..................................................................................................................... 63
Gerador de Código ...................................................................................................................... 64
Compilador ................................................................................................................................. 66
PERSPETIVA DE PROCESSO ................................................................................................................ 66
PERSPETIVA FISICA .......................................................................................................................... 68
MODELO DE NEGÓCIO ...................................................................................................................... 70
xi
7 CONCLUSÕES .............................................................................................................................. 73
TRABALHO REALIZADO E CONCLUSÕES ................................................................................................. 73
TRABALHO FUTURO ......................................................................................................................... 76
BIBLIOGRAFIA ..................................................................................................................................... 77
ANEXO 1 DIAGRAMA DE CASOS DE USO .......................................................................................... 81
ANEXO 2 DIAGRAMAS DE SEQUÊNCIA ............................................................................................. 82
xiii
Índice de Figuras
Figura 1 – Crescimento da disponibilização API’s _____________________________________________________________ 3
Figura 2 – Processo de desenvolvimento tradicional ___________________________________________________________ 9
Figura 3 – Modelos em MDA _______________________________________________________________________________ 11
Figura 4 – Processo de desenvolvimento da MDA ___________________________________________________________ 12
Figura 5 – Transformações PIM - PSM ______________________________________________________________________ 13
Figura 6 – Exemplo de um PIM _____________________________________________________________________________ 14
Figura 7 – Exemplo de um PSM (PostgresSQL) ______________________________________________________________ 14
Figura 8 – Exemplo de um PSM (MySQL) ___________________________________________________________________ 14
Figura 9 – Exemplo de código PostgresSQL _________________________________________________________________ 15
Figura 10 – Exemplo de código MySQL _____________________________________________________________________ 15
Figura 11 – Ciclo de transformação através de ferramentas _________________________________________________ 16
Figura 12 – Arquitetura Geral do Sistema ___________________________________________________________________ 19
Figura 13 – Porção de XML de um .mvc ____________________________________________________________________ 21
Figura 14 – Porção de XML de um .bom ____________________________________________________________________ 22
Figura 15 – Porção de XML de um .qry _____________________________________________________________________ 22
Figura 16 – Porção de XML de um .btm ____________________________________________________________________ 22
Figura 17 – Porção de XML de um .mvcman ________________________________________________________________ 23
Figura 18 – Porção de XML de um .rules ___________________________________________________________________ 23
Figura 19 – Porção de XML de um .gg ______________________________________________________________________ 23
Figura 20 – Transformações dos modelos .bom, .qry e .btm _________________________________________________ 24
Figura 21 – Visão geral do funcionamento de uma API ______________________________________________________ 26
Figura 22 – Distribuição dos diferentes tipos de API _________________________________________________________ 27
Figura 23 – Visão Geral de uma Arquitetura Orientada a Plug-Ins ____________________________________________ 30
Figura 24 – Visão Geral da Arquitetura do Eclipse ___________________________________________________________ 31
Figura 25 – Arquitetura Geral da Plataforma Joomla _________________________________________________________ 32
Figura 26 – Visão geral da arquitetura Next> com uma API REST ____________________________________________ 36
Figura 27 – API REST com múltiplas camadas ______________________________________________________________ 36
Figura 28 – Documentação Típica de uma API REST (Twitter) ________________________________________________ 37
Figura 29 – Exemplo de utilização de uma API REST ________________________________________________________ 38
Figura 30 – Visão Geral da Arquitetura Next> com um SDK __________________________________________________ 39
Figura 31 – Visão Geral da Arquitetura Next> com Suporte para Plug-ins _____________________________________ 42
Figura 32 – Arquitetura Macro da Solução __________________________________________________________________ 48
Figura 33 – “4+1” View Model Diagram ____________________________________________________________________ 50
Figura 34 – Diagrama geral de Casos de Uso _______________________________________________________________ 51
Figura 35 – Diagrama de Componentes_____________________________________________________________________ 52
xiv
Figura 36 – Package de Controlos __________________________________________________________________________ 55
Figura 37 – Diagrama geral do padrão Factory ______________________________________________________________ 56
Figura 38 – Diagrama geral do padrão Composite ___________________________________________________________ 57
Figura 39 – Package de ViewElements ______________________________________________________________________ 57
Figura 40 – Package de Actions ____________________________________________________________________________ 59
Figura 41 – Exemplo de instanciação de uma DataSource ___________________________________________________ 60
Figura 42 – Exemplo do código gerado através de uma DataSource __________________________________________ 60
Figura 43 – Package de Datasources _______________________________________________________________________ 60
Figura 44 – Package de Windows ___________________________________________________________________________ 61
Figura 45 – Diagrama geral do padrão Facade ______________________________________________________________ 62
Figura 46 – Facade para o acesso aos serviços da plataforma Next> _________________________________________ 63
Figura 47 – Diagrama geral do Motor do SDK _______________________________________________________________ 64
Figura 48 – Diagrama geral do padrão Strategy _____________________________________________________________ 65
Figura 49 – Package do Code Generator ____________________________________________________________________ 65
Figura 50 – Package do Compiler __________________________________________________________________________ 66
Figura 51 – Diagrama de sequência simplificado da criação de uma aplicação _______________________________ 67
Figura 52 – Diagrama de sequência simplificado da Submissão da Aplicação ________________________________ 68
Figura 53 – Diagrama geral de deploy ______________________________________________________________________ 68
Figura 55 – Diagrama de sequência de Criação de uma Aplicação - I ________________________________________ 82
Figura 56 – Diagrama de sequência de Criação de uma Aplicação – II _______________________________________ 83
Figura 57 – Diagrama de sequência de Submissão da Aplicação _____________________________________________ 84
Figura 58 – Diagrama de sequência de Geração do Ficheiro XML ____________________________________________ 85
Figura 59 - Diagrama de Sequência de Compilação da Aplicação Gerada ____________________________________ 86
xv
Índice de Tabelas
Tabela 1 – Comparação das diferentes abordagens para o desenvolvimento de Third Party Applications no
contexto Vortal Next> _______________________________________________________________________________________ 45
xvi
Notação e Glossário
API Application Programming Interface
B2B Business to Business
BD Base de Dados
BOM Business Object Model
BTM Business Transaction Model
CMS Content Management System
CRUD Create, Read, Update & Detele
CWM Common Warrehouse Metamodel
DC Domain Controller
G2B2B Government Business to Business
HTTP Hypertext Transfer Protocol
HTTPS Hypertext Transfer Protocol Secure
IDE Integrated Development Environment
IIS Internet Information Services
IP Internet Protocol
JSON JavaScript Object Notation
M2M Model to Model
M2T Model to Text
MAN Management
MDA Model Driven Architecture
MDD Model Driven Development
MOF Meta Object Facility
MVC Model View Controller
xvii
OCL Object Constraint Language
OMG Object Management Group
PIM Platform Independent Model
PSM Platform Specific Model
QRY Query
QVT Query, View and Transformation
REST Representation State Transfer
SDK Software Development Kit
SGBD Sistema de Gestão de Base de Dados
STS Security Token Service
TCP Transmission Control Protocol
TTM Time to Market
URI Uniform Resource Identifier
UML Unified Modeling Language
WCF Windows Communication Foundation
XMI XML Metadata Interchange
Introdução
1
1 Introdução
Este capitulo tem o intuito de dar a conhecer o tema da dissertação, apresentando a
necessidade/problema que levou ao seu aparecimento. São apresentados os objetivos macro
da dissertação e a sua contextualização no âmbito da plataforma Vortal Next>.
Enquadramento
O software que no passado apresentava um papel quase acessório na vida de uma empresa é,
neste momento, considerado estratégico. A maioria das empresas estão dependentes da
internet e de serviços que fazem o seu negócio atingir os clientes de forma mais fácil, rápida e
global. A utilização de software nas empresas permite que estas tenham um crescimento mais
acelerado, possibilita a poupança sem a necessidade de minimizar serviços e o
acompanhamento do avanço tecnológico que se faz sentir de dia para dia.
O atual contexto organizacional e de negócio apresenta mudanças constantes no que toca ao
desenvolvimento, à utilização e à manutenção de aplicações. Estas mutações constantes
levam a estudos e esforços para melhorar as práticas de desenvolvimento de software de
forma a atingir o aumento da produtividade, da qualidade e da redução de custos. Como
consequência do aumento da qualidade do software produzido, é necessário que as
arquiteturas aplicacionais sejam adequadas e cumpram um determinado conjunto de
requisitos altamente mutáveis de negócio para negócio e que, muitas das vezes, não são
triviais de atingir.
A arquitetura do software tem, assim, um papel preponderante na qualidade e performance do
mesmo. É importante que se adapte às constantes mudanças tecnológicas e que seja o mais
flexível possível, para que quando seja necessária uma alteração esta seja controlada e pouco
ou nada afete os componentes aplicacionais já existentes.
A correta definição de uma arquitetura é um processo extremamente complexo, dado que é
necessário ter em conta aspectos chave como desempenho, segurança, disponibilidade,
escalabilidade e portabilidade [1].
Desempenho – Definido como o tempo necessário para o sistema dar resposta a um
determinado evento.
Introdução
2
Segurança – Capacidade de o sistema resistir a acessos não autorizados e mesmo
assim fornecer serviços a utilizadores legítimos.
Disponibilidade – Porção de tempo que o sistema se encontra operacional (é
usualmente referido como o intervalo de tempo entre falhas).
Escalabilidade – Define o quão bem a arquitetura pode crescer ou ser modificada de
forma a suportar novas funcionalidades não planeadas inicialmente de forma suave.
Portabilidade – Capacidade de um sistema ser executado em diferentes ambientes
computacionais.
Os conceitos acima apresentados são alguns dos muitos a ter em conta na definição de uma
arquitetura aplicacional e, conseguir que todos eles sejam cumpridos (p.e. tempo de resposta
inferior a 1 segundo e disponibilidade igual a 100%), é uma tarefa bastante complexa que leva
a que existam compromissos de forma a favorecer uns em detrimento de outros [1].
Com a banalização do uso do software, num contexto onde o desenvolvimento de uma
aplicação realmente inovadora é uma tarefa consideravelmente complexa, é importante que
certos grupos de utilizadores sejam envolvidos o mais possível e que tenham uma grande
liberdade de utilização. Uma prática comum, e que tem vindo a ganhar bastante popularidade
(Figura 1), é a disponibilização de uma API/Framework que dê a possibilidade, a conjuntos
particulares de utilizadores, de desenvolverem as suas próprias aplicações (p.e. AppStore,
GoogleAPI, etc.) de forma a corresponder às suas necessidades ou até mesmo a aumentar o
leque de funcionalidades da aplicação. Este tipo de abordagem é cada vez mais recorrente,
sendo um aspeto diferenciador para o sucesso e desenvolvimento de uma plataforma.
Uma plataforma consiste na combinação de uma arquitetura física (hardware) e aplicacional
(software) que, em conjunto, possibilitam a correta disponibilização de um produto de
software. Durante o seu ciclo de vida, novos requisitos e novas necessidades levam à alteração
de vários aspectos do sistema de forma a melhorar a qualidade e acrescentar funcionalidade.
A necessidade de mudança é quase impossível de contornar e uma plataforma que não
evoluiu cai rapidamente em desuso [2].
As alterações podem ser estritamente funcionais (afetam atributos observáveis pelos
utilizadores, como por exemplo, a interface), estritamente arquiteturais (afetam a arquitetura e
são transparentes para o utilizador, como por exemplo, a evolução estrutural e a performance)
Introdução
3
ou uma alteração funcional/arquitetural (mistura das duas referidas, como por exemplo, a
alteração da implementação). [2]
Figura 1 – Crescimento da disponibilização API’s [3]
O desenho de uma ferramenta que permita o desenvolvimento de aplicações a terceiros, é um
processo que exige um elevado esforço de análise e prototipagem. É um processo bastante
diferente do processo de desenvolvimento de uma aplicação comum, já que nesta a
preocupação é o cumprimento dos requisitos inicialmente definidos. O desenvolvimento de
uma ferramenta que permita o desenvolvimento de aplicações tem de englobar todos os
aspetos chave do domínio em questão, dos quais é possível salientar [4]:
De que forma, a segurança dos dados e dos acessos vai ser mantida;
Como garantir a facilidade de evolução da solução;
Qual o mercado alvo (é importante que a ferramenta tenha em conta o conjunto de
utilizadores que a vai utilizar);
Qual a forma de garantir uma utilização fácil e intuitiva;
Qual a informação de suporte, a que os utilizadores finais devem ter acesso.
Empresas pioneiras no desenvolvimento deste tipo de ferramentas (p.e. Google, Facebook,
Apple, Twitter, etc.) disponibilizaram soluções tecnológicas que se revelaram verdadeiras
alavancas para o aparecimento de processos de inovação que quebraram verdadeiras
barreiras sociais e tecnológicas derivando na criação de novas empresas, novas ferramentas e
novas áreas de aplicação.
A Vortal, apresenta-se como uma empresa líder no mercado de contratação eletrónica
português, com o intuito de tornar a sua plataforma (Vortal Next>) numa referência
Introdução
4
internacional da área. Para isso, é necessário que a plataforma vá de acordo com as
necessidades dos utilizadores, que garanta a melhor experiência de utilização possível e que
se diferencie dos produtos de software concorrentes. No contexto Next>, o desenho de uma
ferramenta que permita utilizadores desenvolverem as suas próprias aplicações e sua
respetiva implementação poderá ser a alavanca necessária para a distinção dos concorrentes
diretos e para a construção de uma vasta comunidade de utilizadores (da plataforma Next> e
que desenvolvem aplicações através da ferramenta).
Em suma, a possibilidade de um conjunto particular de utilizadores ser capaz de desenvolver
as suas próprias aplicações de uma forma rápida, simples e eficaz é extremamente importante
para o sucesso, reconhecimento e diferenciação de um produto de software.
Apresentação do tema
A Vortal é uma empresa especializada em plataformas eletrónicas na área da contratação
pública e privada de vários sectores, que neste momento se encontra em grande crescimento
e tem o objetivo de se tornar uma referência mundial na área com a nova plataforma, a Vortal
Next>. Com a definição deste objetivo, novas funcionalidades e necessidades surgem de dia
para dia e há, muitas vezes, a reformulação de certas áreas/componentes da plataforma
atual.
Como consequência dos motivos acima apresentados uma das novas necessidades
encontradas, no contexto da Vortal, é a criação de uma ferramenta que permita aos
utilizadores fazerem o desenvolvimento das suas próprias aplicações, como acontece, por
exemplo, com os gigantes da Apple, Google e Microsoft. A disponibilização de uma ferramenta
deste tipo, pode ser um aspeto diferenciador dos concorrentes diretos e pode alavancar o
crescimento da plataforma a nível internacional.
Para a criação desta nova ferramenta, é necessário, numa primeira fase, o levantamento e
estudo da arquitetura aplicacional existente, de todos os seus componentes, das suas relações
e do método de desenvolvimento utilizado. Numa segunda fase é entender quais as soluções
existentes no mercado para a disponibilização deste tipo de soluções e quais os impactos da
sua integração na plataforma da Vortal. Por último, é necessário a definição e a concepção do
protótipo da nova arquitetura.
Introdução
5
Objectivos da dissertação
Durante o período de realização da dissertação é esperado atingir alguns objetivos principais.
Dos objetivos principais é de salientar:
Conhecer os conceitos chave do negócio Business to Business (B2B) e a sua
aplicação na plataforma da Vortal;
o Conhecer todos os processos de B2B implementados na plataforma da Vortal
Next>, sendo capaz de descrever o seu funcionamento.
Conhecer os standards de desenvolvimento Vortal para:
o Especificações funcionais e técnicas (desenvolvimento baseado em Model
Drive Architecture), incluindo normas de documentação.
o Processo de gestão de versões de documentação e software.
Estudar a plataforma Vortal Next> e perceber as suas características (inputs, outputs,
etc.) e funcionalidades de forma a entender os pontos fracos e fortes da arquitetura.
Com o entendimento da arquitetura, é um objetivo, conceber num nova arquitetura
que forneça uma camada de abstração, aos utilizadores onde estes possam fazer os
seus próprios desenvolvimentos.
Elaborar uma metodologia de abordagem estruturada para o estudo e reestruturação
da arquitetura de uma plataforma.
Implementar um caso de estudo, de alguns processos de negócio modelados na nova
arquitetura definida.
Tendo em conta todos os pontos acima referidos, o objetivo desta dissertação é responder a
quatro questões:
1. Qual a melhor aproximação ao desenvolvimento de ferramentas que permitam o
desenvolvimento, por parte de terceiros, de aplicações/extensões no âmbito de
uma plataforma web?
2. De que forma é possível adaptar uma das aproximações ao contexto aplicacional
da plataforma Next>, trazendo valor acrescentado para esta sem por em causa o
seu funcionamento?
Introdução
6
3. Qual o mapeamento físico da solução de forma a garantir escalabilidade,
segurança e performance para uma utilização a nível mundial?
4. Qual o modelo de negócio mais indicado para a comercialização deste tipo de
ferramentas?
As respostas a estas quatro questões são o foco principal da dissertação, pois permitem
ponderar e escolher a melhor abordagem para o desenvolvimento de third party applications
no contexto arquitetural e aplicacional da plataforma Next>.
Estrutura da Dissertação
Esta dissertação encontra-se dividida em sete capítulos principais: Introdução, Model Driven
Architeture, Arquitetura Vortal Next>, Integração de Aplicações de Terceiros, Avaliação das
Possibilidades, Vortal Development Software Kit e Conclusões.
O primeiro capítulo (Introdução) tem o intuito de dar a conhecer o tema da dissertação,
apresentando a necessidade/problema que levou ao seu aparecimento. Neste capítulo são
apresentados os objetivos macro da dissertação e a sua contextualização no âmbito da
plataforma Vortal Next>.
No capítulo Model Driven Architecture são apresentados os conceitos fundamentais
relacionados com a Model Driven Architecture, referindo as suas vantagens e desvantagens.
No capítulo Arquitetura Vortal Next> é feita uma breve abordagem da arquitetura da
plataforma Vortal Next>, explicando os principais conceitos internos e os componentes da
mesma. É também explicada a abordagem MDA aplicada pela Vortal.
No capítulo de Integração de Aplicações de Terceiros são apresentadas diversas opções para
permitir o desenvolvimento de aplicações de terceiros, avaliadas as suas capacidades e
impactos. Para cada um das opções, são apresentados os casos de estudo utilizados para
entender a mais valia das soluções.
No capítulo seguinte (Avaliação das Possibilidades) as diferentes abordagens são avaliadas e
mapeadas no contexto aplicacional e arquitetural da plataforma Vortal Next> levando à escolha
de qual a melhor solução.
Introdução
7
No capítulo Vortal Software Development Kit é apresentada a arquitetura da solução a
desenvolver recorrendo a diferentes modelos UML e explicando todos os conceitos associados
à mesma.
Por último, no capítulo de Conclusões é feita uma análise do estudo efetuado durante a
dissertação e são identificados os aspetos a melhorar com a continuação da implementação
da solução.
De notar que a estrutura da dissertação, está diretamente relacionada com o plano de
trabalhos efetuado durante a sua realização. Inicialmente foi importante perceber os conceitos
associados à metodologia de desenvolvimento utilizada pela Vortal (MDA), de seguida foi
necessário perceber quais as soluções existentes para a integração de aplicações de terceiros
e respetivos trabalhos efetuados na área (casos de estudo), de maneira a escolher a solução
ideal no contexto Next>. Por último, foi feito o desenho arquitetural da solução recorrendo a
vários diagramas UML.
Model Driven Architeture
9
2 Model Driven Architeture
Este capítulo tem como intuito apresentar os conceitos fundamentais relacionados com a
Model Driven Architecture, quais as suas vantagens e desvantagens e apresentar o leque de
soluções e ferramentas existentes.
Método de desenvolvimento tradicional
A evolução no desenvolvimento de software é muitas vezes comparada à evolução no
desenvolvimento de hardware. Enquanto as evoluções no mundo do hardware são muito
significativas (processadores mais rápidos, discos rígidos/externos com mais capacidade de
armazenamento e mais compactos, etc.), no mundo do software os métodos de programação
e desenvolvimento são iguais ao que eram há 20/30 anos atrás (Figura 2). Todavia, o
progresso no desenvolvimento de software é evidente e é um facto que é possível construir
sistemas cada vez maiores e mais complexos de forma cada vez mais rápida (através de
ferramentas que auxiliam o desenvolvimento).
Criam-se, de ano para ano, novas tecnologias e linguagens com regras, nomes e processos
distintos de forma a simplificar e agilizar o processo de desenvolvimento, mas ainda não existe
nenhuma que consiga eliminar os diferentes problemas que esta área enfrenta. O
desenvolvimento de software é um trabalho intensivo, onde normalmente é preciso integrar
várias linguagens e sistemas e onde existe sempre o problema da alteração contínua de
requisitos [5].
Figura 2 – Processo de desenvolvimento tradicional [5]
Os principais problemas que o desenvolvimento de software enfrenta, na atualidade, estão
relacionados com produtividade, portabilidade e interoperabilidade [6]. O problema da
produtividade está interligado com o facto de se dispender uma grande parte do tempo de
desenvolvimento a recolher e transformar requisitos em diagramas (tipicamente UML) que, na
Model Driven Architeture
10
sua maioria, são ignorados na fase de programação. Por este facto, usualmente, o que é
produzido não coincide com o que foi inicialmente especificado o que obriga os
programadores a corrigir/remodelar funcionalidades (mais uma vez esta fase é, tipicamente,
realizada sem recurso a documentação).
Como já foi referido, na indústria de software, novas tecnologias e metodologias surgem com
frequência, o que leva a que muito software tenha de ser atualizado, ou até mesmo,
reformulado de forma a conseguir integrar e comunicar com os novos desenvolvimentos.
Como consequência e como, por norma, os sistemas de software não “vivem” isolados
(comunicam e utilizam outros sistemas) as questões de interoperabilidade revelam-se cada vez
mais complexas e apresentam cada vez mais um papel preponderante (p.e. desenvolvimento
web utiliza um grande leque de tecnologias).
A aproximação com base em MDA (Model Driven Architecture) tenta resolver estes e outros
problemas e apresenta-se como uma revolução no processo de desenvolvimento de software,
pelo facto de utilizar modelos e transformações para produzir sistemas de software complexos
[7].
Model Driven Architecture (MDA)
A Model Driven Architecture é uma metodologia de desenvolvimento, proposta pelo Object
Management Group (OMG), que dá enfâse e muita importância à utilização de modelos nos
processos de desenvolvimento de software. A MDA tem o objetivo de separar as
funcionalidades do sistema dos detalhes de implementação/plataforma e, através de
transformações com níveis de abstração cada vez mais específicos, gerar o sistema de
software final. Os modelos produzidos são extremamente formais e não devem conter
qualquer ambiguidade.
No fundo, é uma especificação para apoiar o desenvolvimento baseado em modelos,
designado de Model Driven Development (MDD). O MDD não é uma prática recente, mas
ganhou grande destaque e notoriedade depois do OMG propor a MDA em 2011 [8].
A MDA surge como um novo padrão que tenta elevar o processo de desenvolvimento para um
novo nível. As aplicações construídas utilizando este padrão englobam todas as áreas (desde o
sector dos transportes até ao sector da saúde), são produzidas de forma rápida e consistente
e podem ser implementadas em praticamente todas das tecnologias atuais (.NET, Java, etc.).
Model Driven Architeture
11
Modelos
Os modelos assumem um papel preponderante no processo de desenvolvimento através da
MDA, já que são um dos seus conceitos-chave. Um modelo é definido como uma
representação de uma parte da função, estrutura ou comportamento de um sistema (Figura 3)
e é escrito/definido através de uma linguagem de modelação bem definida e formal, que
tipicamente leva à escolha do UML. Porém esta ferramenta não é uma restrição e existe um
grande conjunto de outras possibilidades [9]. É importante que os modelos sejam completos,
consistentes e não ambíguos para garantir que a transformação dos mesmos em outros
modelos seja possível [5].
A linguagem de modelação UML é, tipicamente, escolhida para a escrita de modelos pois é a
ideal para definir os aspetos estruturais de um sistema [5] (p.e. diagramas de classe) e
quando utilizada em conjunto com Object Contraint Language (OCL) garante a definição de um
modelo consistente e preciso. Enquanto o UML garante a definção estrutural de um sistema, a
OCL permite definir e adicionar regras comportamentais que se aplicam aos diferentes
modelos [5].
Para um dado sistema podem existir vários tipos de modelos e é usual que esses modelos
possuam alguma relação entre si. Existem diversos tipos de relações, por exemplo, um modelo
pode descrever o sistema com mais detalhe que outro.
Figura 3 – Modelos em MDA
Processo de desenvolvimento
O processo de desenvolvimento através da MDA é em tudo semelhante ao processo de
desenvolvimento tradicional, atrás apresentado. As fases do processo são as mesmas e a
diferença reside na natureza dos artefactos que são criados durante cada uma das fases. Na
MDA, os artefactos são modelos formais que podem ser interpretados por um computador.
O conceito chave, por trás desta metodologia é a clara distinção entre a especificação da
funcionalidade e a especificação de como essa funcionalidade é implementada através de uma
Model Driven Architeture
12
determinada tecnologia. Esta distinção é atingida separando os modelos independentes da
plataforma (PIM) dos modelos dependentes da plataforma (PSM).
O processo de desenvolvimento (Figura 4) começa com a construção de um modelo com um
alto nível de abstração (independente de qualquer plataforma), designado de Platform
Independent Model (PIM). De seguida, o PIM é transformado num ou mais Platform Specific
Model (PSM). Por último, o PSM é transformado em código fonte [5].
Figura 4 – Processo de desenvolvimento da MDA
Platform Independent Model (PIM)
O primeiro modelo que resulta da utilização do processo de desenvolvimento da MDA, é um
modelo com um alto nível de abstração que representa o sistema de um ponto de vista
independente de qualquer tecnologia, ou seja, representa as partes da especificação do
sistema que não mudam de uma plataforma para outra. A este modelo dá-se o nome de
platform independet model (PIM).
Para o desenvolvimento de PIM’s é necessário uma linguagem de modelação formal e capaz
de representar as especificações pretendidas, como por exemplo o UML. Os PIM´s podem ser
utilizados em diversos níveis de abstração, nos níveis mais baixos representam apenas os
comportamentos de negócio e em níveis mais avançados podem exprimir funcionalidades
mais complexas do próprio sistema [5] [10].
A produção e o desenvolvimento dos PIM’s traz grandes vantagens, pois permite que a pessoa
responsável por definir as funcionalidades se concentre apenas nas regras de negócio e que
não tenha de ter em consideração nenhum detalhe tecnológico. Estes, permitem que a
funcionalidade seja completamente isolada dos detalhes de implementação, o que garante a
facilidade de migração para outras plataformas.
Model Driven Architeture
13
Platform Specific Model (PSM)
No próximo passo do desenvolvimento, o PIM é transformado num outro modelo designado de
platform specific model (PSM). O PSM é um modelo computacional que combina a
especificação do PIM em detalhes que descrevem como um sistema irá utilizar uma
determinada tecnologia.
A transformação de PIM para PSM (transformações Model-to-Model), normalmente origina
vários PSM’s que podem estar relacionados através de atributos, tipos, etc. (as relações entre
PSM’s, em MDA, designam-se por Bridges) (Figura 5). Quando, através de um PIM, se geram
PSM’s para tecnologias distintas, estes são completamente isolados e independentes (p.e. um
PIM pode ser utilizado para gerar a mesma funcionalidade para .NET e Java) (Figura 5) [10].
Figura 5 – Transformações PIM - PSM
Código Fonte
O último passo no desenvolvimento, consiste em receber os PSM’s como input e produzir o
código fonte (transformações Model-to-Text) para uma plataforma em particular. Pelo facto de
os PSM’s serem dependentes da tecnologia, esta transformação é feita de forma,
relativamente simples. De notar também que, a transformação final de um PSM pode originar
código fonte para diversas linguagens (semelhante ao que acontece na transformação de PIM
para PSM).
Domain Specific Language (DSL)
Como já foi referido em 2.3 os modelos (PIM’s) são definidos/desenhados recorrendo uma
linguagem formal que os permite ser suficientemente completos e consistentes para gerar
PSM’s e, mais tarde, código final. A linguagem normalmente escolhida para este efeito é UML
mas é possível utilizar outras linguagens ou até mesmo criar linguagens especificas para
determinados contextos, as chamadas Domain Specific Languages (DSL).
Model Driven Architeture
14
Uma DSL é uma linguagem de programação ou de especificação utilizada num domínio ou
problema em especifico que, normalmente, não pode ser utilizada fora desse contexto [11].
As DSL’s têm a vantagem de serem focadas num problema em especifico e de permitir
prototipar mais facilmente a aplicação final, mas têm a desvantagem de necessitarem de um
esforço de aprendizagem maior para a sua utilização [11].
Exemplo – Do PIM ao Código
Para esclarecer os conceitos de PIM e PSM e para dar a entender, um pouco, o processo de
desenvolvimento baseado em MDA irá ser apresentado um pequeno exemplo rascunho. No
exemplo existem duas entidades (Cliente e Encomenda) e o objetivo é fazer um PIM que
suporte a migração para qualquer tipo de SGBD existente. Foi utilizada a ferramenta de
modelação Visual Paradigm para o desenvolvimento do seguinte PIM.
Figura 6 – Exemplo de um PIM
Como podemos verificar, o PIM é completamente independente da plataforma (Diagrama de
Classes UML) e apenas representa os atributos e as relações das entidades. Através deste PIM
é então possível gerar vários PSM’s dependendo do SGBD que pretendemos. Os SGBD
escolhidos foram o MySQL e o PostgresSQL e assim foram obtidos os seguintes modelos de
dados.
Figura 7 – Exemplo de um PSM (PostgresSQL)
Figura 8 – Exemplo de um PSM (MySQL)
Model Driven Architeture
15
Como é possível observar, através de um único modelo conseguimos obter outros dois
dependentes da plataforma. O próximo passo é conseguir obter o código de implementação
das tabelas na respetiva linguagem, coisa que é possível devido às ferramentas do Visual
Paradigm. Assim, para cada PSM foi obtido o seguinte código.
Figura 9 – Exemplo de código PostgresSQL
Figura 10 – Exemplo de código MySQL
Tipos de Transformações
Como é possível observar na Figura 4, e como foi referido nos capítulos acima, existem
diferentes tipos de transformações no processo de desenvolvimento baseado em MDA. As
transformações que são responsáveis por transformar PIM’s em PSM’s, são designadas por
transformações Model-to-Model (M2M) e as que transforam PSM’s em código fonte são
designadas por transformações Model-to-Text (M2T). Estes dois tipos de transformações são
feitas através de ferramentas automáticas (como a ferramenta Visual Paradigm), que de forma
muito simplista, não são mais do que um conjunto de regras que, quando agrupadas, definem
como um modelo numa determinada linguagem pode ser transformado num outro modelo
numa linguagem destino.
Model Driven Architeture
16
Ferramentas existentes
A MDA depende muito do uso de ferramentas, já que estas desempenham o papel mais
importante de todo o processo, as transformações. Quando um PIM é produzido, é iniciado
um processo automático de transformação, responsável por transforma-lo num PSM e
consequentemente em código. Este processo de transformação é conseguido através da
utilização de ferramentas, que recebem o PIM como input e geram um PSM que mais tarde é
transformado em código (através da mesma ferramenta ou de uma outra auxiliar) [12].
Figura 11 – Ciclo de transformação através de ferramentas
A escolha da ferramenta é por isso, um passo determinante para o sucesso e para a qualidade
do desenvolvimento. Uma boa ferramenta de transformação deve [6]:
Suportar diferentes plataformas;
Fornecer flexibilidade suficiente para migrar entre plataformas;
Suportar linguagens de modelação distintas (UML incluído);
Integrar com outras ferramentas de desenvolvimento de software.
Devido ao facto de o processo de transformação apresentar grande complexidade e devido ao
facto de o desenvolvimento de uma ferramenta que suporte todos os pontos acima
apresentados ser muito complexo, existem ferramentas que apenas suportam a transformação
PIM/PSM, outras que suportam PIM/PSM/Código e como seria de esperar outras que
suportam PSM/Código (mais comuns).
Como exemplo de ferramentas que implementam transformações desde o PIM até ao código
final, temos algumas ferramentas CASE como o Visual Paradigm e o Enterprise Architect que
utilizam UML para definição dos modelos e permitem a geração de código para inúmeras
linguagens. Nestas ferramentas o processo de transformação é bidirecional, ou seja, as
alterações feitas num determinado PIM são refletidas num PSM, mas o contrário também se
verifica.
Model Driven Architeture
17
Vantagens e desvantagens
Como foi referido no capítulo 2.1, o processo de desenvolvimento de software tradicional tem
alguns problemas, problemas esses que a MDA tenta resolver da melhor maneira possível. É
sabido que não existem formas perfeitas para o desenvolvimento de software, cada
paradigma/metodologia tem as suas vantagens e desvantagens, cabendo à equipa de
desenvolvimento decidir qual a melhor aproximação a utilizar.
Uma das vantagens de salientar é a clara separação entre PIM’s, PSM’s e ferramentas
automáticas de transformação. Isto garante que os responsáveis pelo desenvolvimento dos
PIM´s, não necessitem de se preocupar com detalhes específicos das plataformas e podem
focar a sua atenção na especificação da funcionalidade que melhor se adequa aos utilizadores
finais. Por outro lado, ao nível dos PSM’s é produzido muito menos código, pelo facto de uma
grande porção deste ser automaticamente produzido [5].
Com a utilização do MDA, a questão da portabilidade é largamente simplificada. A
portabilidade é, facilmente, atingida pelo facto de o mesmo PIM poder gerar diferentes PSM’s
para diferentes plataformas e tecnologias.
Para além das vantagens a nível técnico, é também importante referir que através da
utilização de MDA é possível garantir a padronização de código fonte e é conseguida uma
agilização e flexibilidade no tempo de resposta a problemas.
Como todas as abordagens, existem problemas e desvantagens que têm de ser tidos em
conta. No que toca ao MDA, é de salientar o facto de ser introduzida alguma rigidez no
processo de desenvolvimento, ou seja, pelo facto de se programar menos e se gerar mais,
nem todos os pormenores podem ser alterados e manipulados (pelo menos sem alterar o
próprio gerador). Outro problema que é importante salientar, é a mudança dos papéis dos
elementos da equipa já que, a necessidade de programação é menor e a necessidade de
especificação do sistema é acrescida [13].
Arquitetura Vortal Next>
19
3 Arquitetura Vortal Next>
Este capítulo tem como intuito fazer uma breve abordagem da arquitetura da plataforma Vortal
Next>, explicando os principais conceitos internos e os componentes da mesma. Será
abordada e explicada a abordagem seguida pela empresa Vortal para implementar a
metodologia MDA em termos de inputs, outputs e das transformações desde o processo de
definição do PIM até ao código final.
Visão Geral da Arquitectura
A arquitetura da plataforma Next> foi pensada e desenhada de forma a ser possível atingir alta
escalabilidade e alta disponibilidade. A disponibilidade é um fator crucial devido ao facto de se
tratar de um serviço que lida com dados confidenciais e de alta responsabilidade social.
Na Figura 12, que ilustra a arquitetura geral do sistema, é possível observar que a plataforma
é constituída por diversos componentes abstractos com funções bastante distintas, os
Marketplaces, os Markets, o Community e os Portais. Os conceitos apresentados são de teor
conceptual, ou seja, não têm qualquer mapeamento físico na infraestrutura.
Figura 12 – Arquitetura Geral do Sistema
O Community tem a função de atuar como um centralizador do ecossistema Next> (união do
Community e de todos os Marketplaces), ou seja, tem o papel de funcionar como um gestor
de vários conteúdos que são comuns a todos os Marketplaces (p.e. identificação e gestão de
empresas e utilizadores, traduções, entre outros). De notar que na atual arquitetura apenas
pode existir um Community por ecossistema.
Arquitetura Vortal Next>
20
Os Portais, como é possível observar na figura, encontram-se divididos em Público e
Vortal/Corporativo. O Portal Público é o que é disponibilizado ao mercado e o Portal
Corporativo, neste momento, apenas é constituído por uma empresa, a Vortal. Os Portais não
existem fisicamente (apenas são representados logicamente) e funcionam como um agregador
de Marketplaces.
Os Marketplaces, de uma forma muito genérica, podem ser descritos como a área de trabalho
dos compradores e dos fornecedores e onde estes podem interagir de forma a concretizar o
melhor negócio possível. É no Marketplace que decorrem as diferentes interações presentes
no processo de contratação pública ou privada.
Por último é importante referir que, um conceito que não se encontra representado no
diagrama, é o conceito de Market. O Market encontra-se definido dentro de um Marketplace
(um Marketplace tem vários markets) e, como o nome indica, representa o mercado de
contratação (Construção Civil, Área da Saúde, Processos Públicos, entre outros).
Em suma, é possível concluir que a arquitetura Next> é construída por diferentes
componentes, que se encontram ligados entre si. O Community é um componente único no
ecossistema enquanto um Portal é constituído por um ou vários Marketplaces e estes, por sua
vez, são constituído por um ou vários Markets.
Arquitetura Aplicacional
A plataforma Vortal Next> é constituída por várias aplicações, que seguem o padrão
arquitetural Model View Controller (MVC) e onde a comunicação entre Front End e Back End é
concretizada através de Windows Communication Foundation (WCF é utilizado para a
construção de aplicações orientadas a serviços).
Estas aplicações foram desenvolvidas utilizando a metodologia de desenvolvimento Model
Driven Architecture. Pelo facto de a abordagem MDA utilizada ser bastante distinta da
abordagem convencional, foi feito um overview tanto da abordagem convencional e será,
agora, explicada a abordagem utilizada. Como o intuito da dissertação é a revisão e a
restruturação da arquitetura de forma a permitir o desenvolvimento de aplicações, numa
primeira fase, os conceitos relacionados com o MDA são muito importantes para alterações,
desenvolvimentos e revisões futuras.
Arquitetura Vortal Next>
21
Modelos existentes
Como já foi referido, a MDA é baseada em modelos especificados através de uma Domain
Specific Language e, no caso da Vortal, foram definidos vários tipos de modelos e vários tipos
de linguagens para cada um desses modelos. Os modelos definidos foram baseados em XML
e XSD (para validação de conteúdo), modelos estes que são interpretados por um motor Java
(aplicação MDAStudio desenvolvida para a Vortal Next>) que por sua vez é responsável por
gerar código .NET e SQL.
Em primeiro lugar, é importante referir quais os tipos de modelos existentes e quais as suas
funções no âmbito da plataforma Vortal Next>. Os tipos de modelos existentes são,
nomeadamente:
.mvc (Model View Controller) – Representam os componentes de View, Model e
Controller de uma determinada página
Figura 13 – Porção de XML de um .mvc
.bom (Business Object Model) – Representam uma entidade de negócio e todos os
seus atributos e relações
Arquitetura Vortal Next>
22
Figura 14 – Porção de XML de um .bom
.qry (Query) – Representam Stored Procedures em SQL Server
Figura 15 – Porção de XML de um .qry
.btm (Business Transaction Model) – Representam qualquer operação que altere uma
entidade de negócio
Figura 16 – Porção de XML de um .btm
.mvcman (MVC Management) – São uma abstração dos .mvc, funcionam como uma
página de gestão de entidades
Arquitetura Vortal Next>
23
Figura 17 – Porção de XML de um .mvcman
.rules – Representam restrições ao nível dos .bom
Figura 18 – Porção de XML de um .rules
.gg – Representam as expressões/palavras que devem estar no tradutor
Figura 19 – Porção de XML de um .gg
.cfgman (Configuration Management) – Representam as configurações das aplicações
e dos ambientes
Transformações entre modelos
Com os diferentes tipos de modelos em mente, é possível então perceber quais os tipos de
transformações que estes sofrem até ser gerado o código final da aplicação, transformações
essas que podem ser M2M (Model-to-Model) ou M2T (Model-to-Text). De notar, que devido ao
facto de a comunicação Front End/Back End ser feita através de WCF (Windows
Arquitetura Vortal Next>
24
Communication Foundation), em muitos dos processos de transformação são gerados serviços
para esse efeito. Assim, o workflow de transformações dos modelos (.bom, .qry e .btm) é o
seguinte:
Figura 20 – Transformações dos modelos .bom, .qry e .btm
O workflow de transformação dos modelos .mvc/.mvcman não é exemplificado, pois estes são
diretamente transformados em código .NET, ou seja, este modelos são recebidos como Input
pelo MDAStudio e automaticamente é gerado o código correspondente à View, ao Model e ao
Controller (este último necessita de ser implementado e modificado pelo programador).
Problemas da abordagem/ferramenta
A ferramenta de MDA da Vortal foi desenvolvida com o intuito de padronizar e agilizar o
desenvolvimento da plataforma, e de maneira a ser atingida uma maior qualidade e segurança
no desenvolvimento. A verdade é que a plataforma cresceu de tal forma, que as aplicações
atingiram um tamanho bastante considerável e as dependências entre aplicações causaram
uma perda de agilidade no desenvolvimento devido ao tempo de transformação/geração dos
modelos (processo que demora cerca de 30 minutos atualmente).
Para além do tempo de transformação/geração, a ferramenta atingiu tal dimensão que uma
mudança ao nível, por exemplo, da linguagem final que está a ser gerada exige um grande
esforço de programação e refactoring. Apesar de os modelos utilizados serem independentes
da plataforma, a sua transformação para código final (transformação M2T) apenas é possível
para uma linguagem especifica, ou seja, o conceito de um único modelo poder gerar código
fonte para linguagens e plataformas distintas (p.e. .NET e Java) é perdido.
Integração de Aplicações de Terceiros
25
4 Integração de Aplicações de Terceiros
Existem na literatura, diversas aproximações à forma de possibilitar extensibilidade a uma
plataforma, tendo cada uma as suas vantagens e desvantagens mediante os seus objetivos,
ambientes e tecnologias utilizadas.
As diferentes abordagens apresentadas, são utilizadas em contextos web distintos,
dependendo do público alvo e de quais os conteúdos a disponibilizar. É importante perceber e
estudar o porquê e quais os contextos em que as abordagens são mais utilizadas e quais as
razões que levam à sua escolha.
Nas secções abaixo, serão apresentadas diversas opções, avaliadas as suas capacidades e
impactos e selecionada qual a melhor opção para o contexto atual, tendo em conta não só as
opções tecnológicas como também o seu time to market.
Application Programming Interface
Uma Application Programming Interface (API) tem o intuito de disponibilizar a parceiros e
programadores externos (Third Party Developers), o acesso a componentes e serviços de
maneira a possibilitar o rápido e eficaz desenvolvimento de aplicações (p.e. API do Twitter e do
Facebook). Uma API é, essencialmente, um contrato entre a aplicação e o programador, que
garante a confiança e a eficiência da ligação (Figura 21) [14] [15].
Existem dois tipos distintos de API’s, as públicas e as privadas. Uma API pública é
disponibilizada livremente a todos os utilizadores, enquanto que uma API privada é utilizada no
contexto de uma entidade para o desenvolvimento da própria aplicação, sendo também
disponibilizada a parceiros mediante um acordo contratual (pode representar uma grande
fonte de receitas da organização) [14].
No contexto web, as API’s, são normalmente disponibilizadas através de Web Services REST
(Representation State Transfer). Este tipo de API’s, recebe pedidos HTTP do cliente e, através
da interpretação do seu conteúdo, são geradas as respostas adequadas (tipicamente em
formato JavaScript Object Notation, mais conhecido por JSON) [15] [16].
Integração de Aplicações de Terceiros
26
Figura 21 – Visão geral do funcionamento de uma API
Este tipo de API tem a vantagem de ser, relativamente, fácil de utilizar e desenvolver, mas
onde é necessário ponderar os riscos legais, técnicos e estratégicos associados. Ao
implementar uma API, cuidados especiais com a autenticação dos utilizadores e com a
segurança dos dados são importantes e é necessário garantir que o trafego direcionado à
mesma não afeta o correto funcionamento da plataforma [14].
Alguns dos perigos associados ao desenvolvimento de uma API, incluem [14]:
Violação de questões legais;
Ataques direcionados à API ou ao conteúdo disponibilizado;
Exposição do negócio aos concorrentes diretos;
Conseguir com que a infraestrutura seja capaz de suportar o tráfego gerado pelos
pedidos dos clientes e que consiga retornar a resposta adequada.
Atualmente, a internet é o difusor de informação mais utilizado a nível mundial devido ao
crescimento da utilização de redes sociais como o Twitter, o Facebook e o Google+. Pelo facto
de o leque de redes sociais ser muito alargado e de a quantidade de informação e utilizadores
ser enorme, é comum este tipo de plataforma disponibilizar uma API para o acesso a
informação e serviços. Inicialmente, as API’s eram disponibilizadas através de Web Services
SOAP, mas mais tarde surgiu a abordagem REST (Representational State Transfer) que levou à
migração de muitas API’s (p.e. Google) e afirma-se, atualmente, como a abordagem mais
utilizada e mais vantajosa (Figura 22) [17].
Como já foi referido, a API da Google era disponibilizada utilizando unicamente Web Services
SOAP mas, após o aparecimento do protocolo REST esta foi atualizada e disponibilizada
utilizando o mesmo. Esta mudança permitiu à Google reduzir, quase para metade, a largura
de banda utilizada no dia a dia.
Integração de Aplicações de Terceiros
27
Figura 22 – Distribuição dos diferentes tipos de API [18]
Representational State Transfer (REST), é um estilo arquitetural não padronizado baseado no
standard HTTP (Hypertext Transfer Protocol). Neste protocolo, tudo é modelado com base em
recursos tendo cada recurso tem um URI (Uniform Resource Identifier) único associado [19].
Serviços REST “puros” são completamente stateless (não guardam informação do cliente do
lado do servidor), o que faz com que sejam especialmente indicados para o desenvolvimento
de uma API pública focada em operações de Create-Update-Read-Delete (como é o caso das
redes sociais) [19].
Estas arquiteturas têm dois componentes essenciais: clientes e servidores. Os clientes fazem
pedidos a um determinado recurso localizado no servidor, onde estes são interpretados de
forma a gerar a resposta adequada. Os pedidos são efetuados utilizando os métodos:
GET é utilizado para obter informação de um recurso sem o modificar;
POST é utilizado para criar e editar informação;
PUT é utilizado para atualizar informação;
DELETE é usado para remover informação do servidor.
Um recurso é, essencialmente, qualquer conceito/informação que possa ser endereçada por
um URI [16].
REST suporta variados tipos de dados (p.e. JSON) e tem ganhos de performance e
escalabilidade em relação às soluções concorrentes, já que consegue transmitir o mesmo tipo
de informação utilizando menor largura de banda. A largura de banda é, neste momento, um
ponto fulcral a ter em conta no desenvolvimento de uma API devido ao constante crescimento
de utilização dos dispositivos móveis no dia a dia [15].
Integração de Aplicações de Terceiros
28
Os conceitos chave associados ao REST são [14]:
Interface de separação entre cliente e servidor;
Não é guardada qualquer informação do cliente no servidor (stateless);
Camadas intermédias que permitem aumentar a escalabilidade e a segurança (o
cliente não percebe se está ligado ao servidor principal ou a um intermédio);
Orientado a recursos.
Uma API REST é extremamente vantajosa, como já foi referido, quando o foco é a gestão de
dados (CRUD) garantindo o desenvolvimento de aplicações móveis com um consumo de
largura de banda reduzida e de performance elevada, podendo mesmo ser um fator
diferenciador dos concorrentes do mercado.
Software Development Kits
Um Software Development Kit (SDK) representa um conjunto de ferramentas de
desenvolvimento com uma estrutura bem definida, e permite o desenvolvimento de software
para um determinado sistema operativo, consola, dispositivo móvel, ou qualquer outra
plataforma similar. Um SDK, normalmente, tem um IDE (Integrated Development
Environment) associado que ajuda os programadores no desenvolvimento de software com
maior qualidade dado que inclui funcionalidades como debug e validação sintática e semântica
em tempo de desenvolvimento. As ferramentas incluídas num SDK devem ser suficientes para
permitir criar, depurar, manter, testar e suportar as aplicações desenvolvidas.
São, normalmente, produtos de software extremamente robustos e escaláveis compostos por
diferentes camadas de abstração. O número de camadas e a sua divisão depende muito do
contexto de desenvolvimento e do tipo de SDK. Tipicamente, existe uma camada de baixo nível
que funciona como elemento de ligação a diversos ambientes (p.e. base de dados), uma
camada responsável por conter todas as bibliotecas passíveis de serem utilizadas pelo mesmo
(p.e. JFace e SWT) e uma camada responsável por lidar com os eventos do utilizador e
produzir as respostas adequadas [20].
A maior parte das empresas disponibilizam os SDK’s de forma totalmente gratuita, já que o
grande objetivo é conseguir que programadores externos desenvolvam aplicações com
qualidade de forma a enriquecer a plataforma (p.e. Google PlayStore). Tendo em conta que
Integração de Aplicações de Terceiros
29
todos os SDK’s são diferentes, é importante garantir um repositório de documentação
alargado, bem como uma linguagem/metodologia de fácil aprendizagem e utilização.
Com o aparecimento dos smartphones (Android e iPhone), houve a necessidade de criar uma
comunidade de utilizadores de forma a que estes pudessem colmatar as suas necessidades
da melhor forma possível e partilhar essas soluções com o mundo. Esta proliferação de
aplicações e a sua consequente necessidade de distribuição levou à definição de novos
modelos de negócio materializados no conceito de loja online, como por exemplo, os
mercados aplicacionais da Apple (AppStore) e da Google (PlayStore) [17]. Ambas as entidades,
disponibilizaram um SDK que possibilita o desenvolvimento de aplicações que, para além de
potenciar o crescimento da comunidade, representa uma grande parte dos seus lucros.
A AppStore, por exemplo, iniciou a sua atividade em Julho de 2008 e em Janeiro de 2011
atingiu a marca de 10 biliões de aplicações descarregadas. Durante este período de tempo
houve inúmeras aplicações a surgir diariamente e muitas se afirmaram como necessárias,
fazendo agora parte do nosso quotidiano. A loja da Apple, é reconhecida e disponibilizada em
todo o mundo e a luta para o desenvolvimento de um aplicação inovadora e com sucesso é
tanta que no ano 2010 a Apple arrecadou cerca de 250 milhões de dólares com o seu
mercado virtual. A Google é outro caso de sucesso, com 300 milhões de dispositivos ativos e
mais de 450 000 aplicações disponíveis [17].
Estes números continuam a crescer e a procura de aplicações para satisfazer as necessidades
diárias é cada vez maior, o que leva a que muitas empresas se especializem no ramo do
desenvolvimento de aplicações para dispositivos móveis.
No caso da Apple e da Google, é necessário garantir que os utilizadores têm acesso a uma
ferramenta de desenvolvimento com uma linguagem definida (quando se refere a linguagem,
entende-se também padrões de desenvolvimento, como por exemplo o Model-View-Controller)
com uma arquitetura bastante robusta, onde todos os testes e desenvolvimentos podem ser
executados através de emuladores. O resultado destas ferramentas de desenvolvimento são
pacotes de software como jogos ou aplicações que, depois de validados, são integrados no
mercado e disponibilizados a todos os utilizadores de forma gratuita ou não. É neste casos que
os SDK’s se afirmam em relação às restantes abordagens como a grande opção de
desenvolvimento de aplicações por parte de terceiros.
Integração de Aplicações de Terceiros
30
Desenvolvimento baseado em Plug-Ins
Por último, existe também a possibilidade de o desenvolvimento das aplicações ser feito com
base em plug-ins, ou seja, os programadores desenvolvem software para adicionar funções
muito especificas a uma determinada plataforma. Os plug-ins são normalmente pacotes de
software pequenos e leves a nível computacional que são escolhidos e instalados pelos
utilizadores de forma a colmatar as suas necessidades e, normalmente, não requerem
qualquer tarefa de configuração [21].
Quando uma plataforma suporta o desenvolvimento baseado em plug-ins (host/core
application), esta fornece os serviços que podem ser utilizados pelo plug-in e garante um
mecanismo de gestão dos mesmos (Figura 23). Assim, um plug-in não é um componente
isolado e o seu ciclo de vida depende, inteiramente, da host application [21].
Figura 23 – Visão Geral de uma Arquitetura Orientada a Plug-Ins
Algumas das razões, mais fortes, que impulsionam o desenvolvimento de uma arquitetura
com suporte ao desenvolvimento de plug-ins são [22]:
A possibilidade de programadores externos aumentarem as funcionalidades da
aplicação;
Possibilidade de os programadores internos adicionarem funcionalidades ao core
aplicacional sem comprometer a plataforma já existente;
Fácil adição de funcionalidades e alta escalabilidade (facilidade de evolução);
Separar o core aplicacional de funcionalidades extra (diminuir o tamanho da
aplicação).
Integração de Aplicações de Terceiros
31
O desenvolvimento baseado em plug-ins é uma abordagem bastante comum no mundo da
informática. Foi utilizada pela primeira vez num editor de texto (EDT) e, atualmente, é utilizada
para as mais variadas operações (p.e. programas de edição gráfica, como o Photoshop,
utilizam plug-ins para suportar novos tipos de imagens e os browsers utilizam plug-ins para
disponibilizar novas funcionalidades aos seus utilizadores).
O Eclipse (IDE desenvolvido em Java) é uns dos mais interessantes casos de sucesso quando
se pensa no ramo de desenvolvimento baseado em plug-ins. Devido a um grande número de
programadores, o Eclipse oferece uma extensa biblioteca de plug-ins e suporta uma grande
variedade de linguagens de programação [23]. Devido a esta flexibilidade, e tendo em conta o
sucesso e crescimento atingido a nível mundial, o Eclipse será utilizado como objeto de estudo
de forma a serem entendidos os seus componentes e conceitos principais.
O principais componentes da arquitetura do Eclipse são o workbench e o workspace. O
workbench é a entidade responsável pela interface gráfica da ferramenta e pela gestão das
janelas [24]. O workspace funciona como um sistema de ficheiros responsável por criar,
guardar e editar ficheiros, diretórios e projetos (Figura 24) [23].
Os plug-ins, no contexto do Eclipse, são programas que são carregados e conectados através
de pontos de extensão (extension points) e expõem as funcionalidades do sistema [24]. É
possível que plug-ins distintos se conectem entre si para aumentar o leque de funcionalidades.
(Figura 24) [21].
Figura 24 – Visão Geral da Arquitetura do Eclipse [20]
Com a constante necessidade de as empresas exporem os seus serviços na web, novas
formas e metodologias foram pensadas e desenvolvidas de forma a permitir que pessoas com
Integração de Aplicações de Terceiros
32
poucos ou nenhuns conhecimentos técnicos conseguissem desenvolver um web site funcional
e apelativo com os conteúdos desejados. Existem na web diversas abordagens e soluções para
o fazer, cada uma delas com as suas vantagens e desvantagens. Uma das formas de
desenvolvimento que surgiu nesse contexto, foi o desenvolvimento baseado em plug-ins e
associado a Content Management Systems (CMS) (p.e. Wordpress, Joomla e DotNetNuke) [25]
[26].
O uso de CMS’s traz grandes vantagens pois permite a criação rápida e eficaz de um web site
completamente funcional. Os CMS’s possibilitam a fácil alteração de conteúdos, garantem um
nível de segurança relativamente elevado e disponibilizam, no seu core, funcionalidades base
muito utilizadas (p.e. sistema de gestão de mensagens e de utilizadores). São os chamados
sistemas “easy to use, hard to master” [25]. Em contrapartida, os CMS’s, são sistema
pesados que necessitam de bastantes recursos a nível de hardware e constantes upgrades ao
nível de software [27].
O desenvolvimento de plug-ins enquadra-se no contexto do desenvolvimento de CMS’s, pois
estes permitem acrescentar funcionalidades ao sistema base de forma a melhor corresponder
às necessidades dos utilizadores [27].
O Joomla!, em consistência com o Wordpress, é um dos CMS’s mais conhecidos e mais
utilizados a nível mundial, sendo constituído por dois conjuntos de librarias base: o primeiro
conjunto são as librarias mantidas por programadores do Joomla; o segundo são as librarias
mantidas por programadores externos (Third Party Developers). No topo das librarias base do
CMS existe uma camada de abstração, responsável por fazer a ponte entre os plug-ins
desenvolvidos (por terceiros ou até mesmo pelos próprios programadores do Joomla) e as
librarias acima apresentadas (Figura 25) [28].
Figura 25 – Arquitetura Geral da Plataforma Joomla [28]
O desenvolvimento baseado em plug-ins garante a extensibilidade da aplicação (constante
desenvolvimento de novas funcionalidades), permite o desenvolvimento em paralelo (os plug-
Integração de Aplicações de Terceiros
33
ins são componentes isolados) e, pelo facto de um plug-in normalmente representar uma
funcionalidade específica, o seu desenvolvimento é focado não existindo over-development
[25]. Apesar de ser uma abordagem extremamente flexível e que garante um alto nível de
escalabilidade é, de todas as abordagens apresentas, aquela que possivelmente traz mais
complexidade e riscos associados. A complexidade deste tipo de aplicação cresce
exponencialmente com o número de plug-ins desenvolvidos e, com isso, aumenta a dificuldade
de gestão e probabilidade de conflitos entre os mesmos. Uma das dificuldades associadas a
este tipo de abordagem é a de garantir a gestão e compatibilidade entre diferentes versões do
mesmo plug-in [22].
É ainda necessário que exista um mecanismo que valide o conteúdo dos plug-ins
desenvolvidos, para que estes não interfiram no bom funcionamento do core aplicacional e um
mecanismo que garanta a integração dos mesmos com o core aplicacional.
Avaliação das Possibilidades
35
5 Avaliação das Possibilidades
Derivado do estudo previamente efetuado e no sentido de identificar quais as abordagens mais
utilizadas de forma a permitir o desenvolvimento de Third Party Applications, é necessário
avaliar e mapear estas abordagens no contexto aplicacional e arquitetural da plataforma Vortal
Next>. Por cada abordagem, é avaliado o seu impacto na arquitetura atual e a facilidade de
desenvolvimento quer na perspetiva do utilizador final quer na perspectiva da complexidade da
solução. Questões relacionadas com a performance e interoperabilidade da solução serão
também avaliadas e, por último, será avaliada a abordagem a nível de time-to-market e
vantagem competitiva para o negócio atual da Vortal.
API’S baseadas em REST
No contexto Next>, uma API REST é um serviço que poderá trazer grandes vantagens, dado
que permite o desenvolvimento de diversas aplicações para uma gama de dispositivos mais
alargada. Sendo a Next> uma plataforma com o intuito de se tornar uma referência
internacional no mercado de contratação eletrónica, é essencial que acompanhe o avanço
tecnológico e proporcione diversas formas de integração com plataformas externas.
Arquitetura e Escalabilidade
Como já foi referido (3.1), no ecossistema Next> existem dois componentes principais: o
Marketplace e o Community. O Community funciona como um gestor de vários conteúdos
(p.e. informação de empresas) e o Marketplace representa a área de trabalho dos
compradores e dos fornecedores. Assim, é possível concluir que a informação com mais
relevância para o negócio do utilizador se encontra ao nível do Marketplace, ou seja, toda a
informação relacionada com as consultas da plataforma (respostas, avaliações, negociações,
etc. ). Devido a este facto, o Marketplace vai ser o foco de toda a dissertação e de todas as
soluções apresentadas, sem prejuízo de a arquitetura da solução apresentar flexibilidade
suficiente para a inclusão de informação derivada de outras fontes internas à plataforma.
Assim sendo, quando se pensa na disponibilização de uma API, é aconselhável que esta se
encontre ao nível do Marketplace, que seja acessível através de Web Services REST, que seja
responsável pela comunicação com a plataforma e pelo retorno dos dados no formato
adequado (Figura 26).
Avaliação das Possibilidades
36
Figura 26 – Visão geral da arquitetura Next> com uma API REST
Esta solução tem um impacto reduzido na arquitetura dado que apenas é necessário definir
camadas de acesso independentes da arquitetura atual que, por sua vez, possuam os
métodos necessários para aceder aos dados já existentes.
A escalabilidade é, muitas vezes, referida como a facilidade de um sistema ser modificado de
forma a responder a um determinado problema. Esta definição de escalabilidade é
suficientemente vaga para gerar confusão e diferentes opiniões relativamente ao assunto. A
es