7 de agosto de 2008

O que é SOA, afinal?

2 comentários

Frequentemente recebo emails de pessoas com dúvidas sobre SOA (Services Oriented Architecture) e sua aplicação prática. O último foi esse aqui:

"Oi Rodolpho, td bem?

Meu nome é Fulano-de-tal. Li um ebook seu na internet sobre SOA, e tb tenho lido alguns artigos sobre o assunto na internet. Tenho tido uma certa dificuldade pra entender esse conceito na prática. Minha dúvida é: SOA é uma maneira de se implementar os softwares, disponibilizando eles como serviços e garantindo que eles possam se integrar? Ou SOA é uma maneira de se integrar os softwares já existentes? Se vc fosse "oferecer SOA" pra minha empresa por exemplo, vc ofereceria serviços que tem a capacidade de se integrar ou uma solução para integrar o que
eu já possuo em minha impresa? Ou não é nada disso e entendi tudo errado? Agradeceria se vc tivesse dois minutinhos pra tirar essa dúvida minha. Se não tiver eu entendo.

Obrigado, Fulano-de-tal."

Essa foi minha resposta:

"Olá Fulano-de-tal.

É por aí mesmo: SOA é tudo isso ao mesmo tempo :-)

SOA é uma ABORDAGEM. Uma abordagem que afeta todas as esferas do desenvolvimento:

1. A implementação utilizando padrões abertos e interoperáveis (exemplo: WebServices);
2. O design (no sentido de projetar) com partes de fraco acoplamento, estanques e com interfaces bem definidas;
3. O projeto em si (no sentido de esforço de desenvolvimento) deve ser orientado a entregar partes atômicas (se possível orçadas e custeadas independetemente)
4. A organização como um todo: todos (o cliente da área de negócio, o pessoal de desenvolvimento e produção) passam a ter uma única unidade de medida: o serviço.

Do ponto de vista tecnológico/técnico SOA não traz nada de revolucionário ou realmente novo. O todo é que faz a diferença: a soma dessas diferentes visões pode mudar radicalmente a maneira como desenvolvemos software. Pense: o negócio existe "sistema" no ambiente de negocio. E se o negócio mudar, o sistema que suporta a empresa tem de mudar junto. E aí começam os problemas: você já foi conversar com o gerente do seu banco para pedir um impréstimo ou outro assunto qualquer? Reparou em quantas telas diferentes (web, caracter, aplicação local, etc) e quantas vezes ele precisa digitar o seu CPF ou o número de sua conta? Ele (o seu gerente) é o ponto de integração entre os diferentes sistemas.

Para piorar, e se parte do negócio for tercerizada? Como tirar um pedaço do "sistema" e terceriza-lo? Neste ponto o sistema (o software) passa a ser um entrave para que o negócio mude, dependendo de como foi construído. Falamos de sistemas a 40 anos... não faz mais sentido. Hoje os "softwares" que suportam as empresas formam uma imensa teia, um emaranhado de integrações que começam a engessar a capacidade de adaptação das empresas.

É aí que SOA brilha: ao mesmo tempo permite construir novos softwares de cima para baixo, também permite"desconstruir" os softwares existentes de baixo para cima sem destruí-los (mantendo seu funcionamento). É como se pegassemos um monte de fios todos emaranhados e começassemos a desembarassar aos poucos. Progressivamente. Eventualmente podemos ter de jogar fora o último "bolôlô", mas conseguimos aproveitar uma boa parte. Sem ter de refazer. Seja qual for a tecnologia: COBOL, .NET, Java, etc.

Portanto, é isso mesmo, você está no caminho correto: SOA tem significado diferente dependendo da esfera na qual a pessoa se encontrar. Mas pela primeira vez temos um vocabulário comum que faz sentido para todos: serviço de aprovação de crédito. Pode ser solicitado, melhorado, codificado, monitorado, implantado, backupeado, restaurado, acelerado... Desde o cliente até o analista de produção, passando pelo desenvolvedor e gerente de projeto sabem o que é o "serviço de aprovação de crédito". E isso faz sentido para todos.

Abraço,
Rodolpho"

É isso aí pessoal... madem comentários ou dúvidas que a gente conversa!