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

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

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

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.

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)

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

Ana Claudia
Daniel Barreto
Roberto Leones