SOA

pesquisa realizada por Ana Claudia, Daniel Barreto e Roberto Leones em 2007-2

soa2.jpg

Página destinada a apresentação do trabalho de pesquisa Sobre Arquitetura Orientada a Serviços [SOA].

intro.jpg
Antes de definirmos o que significa SOA (Service Oriented Architecture - Arquitetura Orientada a Serviços) precisamos definir alguns conceitos:
conc.jpg

Serviço

Segundo Cleuton Sampaio “Um serviço é um componente que atende a uma função de negócio específica para seus clientes. Ele recebe requisições e as responde ocultando todo o detalhamento do seu processamento”.
Os serviços devem ser autocontidos, ou seja, devem ser independentes dos clientes que o requisitarão (baixo acoplamento), além de possuírem granularidade grossa e uma interface pública.

Cliente

Cliente é o requisitante do serviço. No caso de SOA é o módulo da aplicação que utiliza o serviço provido.

Acoplamento

Acoplamento é a medida de interdependência entre dois módulos. Baixo acoplamento significa que a comunicação dos dois é feita através da troca de mensagens.

Granularidade

Granularidade é diretamente proporcional ao “volume” de funções que determinado componente executa. Componentes com poucas funcionalidades são ditos de granularidade fina, já componentess com muitas funcionalidades são ditos de granularidade grossa.

Interface Pública

Interface é a definição do comportamento de um módulo. No caso de SOA, a interface do serviço deve ser pública e corresponder à definição do que o serviço entende, ou seja, o que os clientes precisam saber para utilizar aquele serviço.

soa_bar.jpg

Definidos esses conceitos podemos entender o que significa SOA.

SOA é um paradigma de desenvolvimento de aplicações focado na criação de serviços.

SOA não é uma tecnologia, mas sim um modo de desenvolver softwares pensando na reutilização dos componentes, por isso SOA implica em aplicações distribuídas. Como já falamos, um serviço não é uma aplicação completa, para utilizá-lo precisamos de uma aplicação que o utilize.

SOA tem figurado atualmente como a mais nova "onda" do mundo de TI, exatamente pela possibilidade de "reutilizar código" na forma de serviços, dimuindo enormemente o tempo e a complexidade do desenvolvimento de novos aplicativos. Além disso cabe destacar a possibilidade do serviço ser construído em tecnologia diferente da aplicação cliente. Como exemplo, poderíamos citar um website escrito em ASP que utiliza um serviço para recuperar, através de transação Cobol, os produtos de determinado fabricante, armazenados em um banco de dados relacional em uma plataforma Mainframe.

Apesar de ser extremamente produtivo nos casos certos, SOA não deve ser visto como a cura para todos os males, pois o custo de seu processamento é caro e, muitas vezes, inviável. Ele deve ser utilizado em projetos relativamente grandes e que precisem integrar diversas tecnologias. Todas tecnologias possuem suas aplicabilidades adequadas, portanto não devemos utilizar SOA para qualquer aplicação e sim quando determinadas funções integram parte da solução de alguns aplicativos.

Recentemente, pesquisando na web, vi uma discussão sobre determinada tecnologia onde um dos participantes disse que só se deveria usá-la quando não houvesse nada melhor para aquele objetivo. Outro participante extendeu essa observação afirmando que isto aplica-se a qualquer tecnologia. Concordo com ambos, pois se existe algo melhor para utilizar por qual motivo utilizarei algo que não será tão bom? Este mesmo problema ocorre com SOA. Quando utilizá-la é uma questão importante e que deve ser bem pensada/discutida para não correr o risco de aplicá-la em locais em que não deveriam.

Conceito OOAD(desenvolvimento orientado a objetos) SOAD(desenvolvimento orientado a serviços)
Unidade de desenvolvimento Classes Serviços
Foco principal Funcionalidade Processo de negócio
Acesso Interno à empresa Externo à empresa
Visão Visão da aplicação (horizontal) Visão tras-aplicações (vertical)
Acoplamento entre os componentes Forte Fraco
Manutenção de estado Stateful Stateless

Tabela reproduzida do livro SOA e Web Services em Java de Cleuton Sampaio.

Video SOA (inglês)

refer.jpg

SAMPAIO, Cleuton. SOA e Web Services em Java / Cleuton Sampaio. - Rio de Janeiro: Brasport, 2006.
IBM.COM, http://www.ibm.com/developerworks/webservices/library/ws-antipatterns

alunos.jpg
Ana Claudia
Daniel Barreto
Roberto Leones
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License