23 de September de 2008

Anatomia do Serviço – Parte 1

Bons códigos são aqueles desenvolvidos para compreensão humana, e não exclusivamente para compiladores. Para uma compilação bem sucedida, basta o formalismo da linguagem (análise léxica, sintática e semântica); já para a compreensão humana, são necessárias abstrações representativas – preferencialmente originadas do domínio do software, DDD – que auxiliam na percepção, contribuindo com agilidade no desenvolvimento.

Nesse âmbito, compiladores não podem ajudar. Não garantem que um código seja entendido ou manipulado dentro do que seria um esforço viável. No entanto, abstrações (sub-rotinas, classes) aderentes aos conceitos do negócio possibilitam que a evolução do código e o entendimento dos conceitos relativos ao negócio caminhem no mesmo sentido, ou seja, o código só sofre mudanças em grandes proporções se o negócio também mudar significativamente. Boas abstrações possibilitam que mudanças sejam mais orgânicas e naturais para os seres humanos.

“[...] the purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise.” – Edsger W. Dijkstra

A abstração é uma ferramenta chave, e está intimamente relacionada com o conceito de encapsulamento. Focando nesse aspecto essencial, Page Jones descreve em seu livro “Fundamentals of Object-Oriented Design in UML” os níveis de encapsulamento. Baseando-se nesses níveis, é possível partir de simples linhas de código e chegar ao SOA, em que sub-rotinas encapsulam linhas de código, objetos encapsulam estado e comportamento, e serviços encapsulam objetos ou outros serviços.


Para superar limitações humanas, como lidar com processos complexos e grandes quantidades de informação, SOA fornece uma abstração que indexa e organiza o código, o serviço. Os serviços podem encapsular a lógica de uma tarefa do negócio e também encapsular a lógica referente a conceitos-chaves do domínio.

“But there is a more sensible way to SOA, which maintains loose coupling and drives high cohesion and the secret is this: build your services to implement business processes. Don’t let the data guys scream at you that you need an enterprise data model (you don’t) and don’t let the application portfolio guys demand that you buy everything and stitch it together later (you can’t, this only gets you Frankenstein systems).” Anemic Service Model , Jim Webber, Ph.D. Global Architecture Lead, ThoughtWorks.

Para quem conhece CBD e DbC, isso não é novidade. Talvez, a ênfase em associar serviços ao processo de negócio (serviços representando tarefas em um processo de negócio) seja o diferencial de SOA.

Abstrações aderentes ao negócio proporcionam flexibilidade ao software. No caso de SOA, as abstrações indexam, isolam, organizam conceitos principais e os relacionam com processos de negócio [1][2], tornando as mudanças aceitáveis, mas em um contexto corporativo, não apenas em uma aplicação (os serviços possibilitam isolar a lógica do processo de negócio da lógica dos conceitos principais da organização, facilitando mudanças no processo). Cabe ressaltar que processo de negócio é uma forma natural de representar o funcionamento de uma empresa.

Em outras palavras, SOA torna as mudanças no processo de negócio mais ágeis, uma vez que os serviços deixam a arquitetura dos sistemas aderente ao negócio; se o processo sofrer uma pequena mudança, seus sistemas mudam de forma proporcional. A dissociação da lógica do processo de negócio da lógica do domínio, utilizando interfaces bem definidas, contribui com a flexibilidade. Uncle Bob, em seu blog, sustenta uma visão particular e interessante neste sentido:

“[...] Software developers have known for years that software that changes frequently should be decoupled from software that changes infrequently. When applied to individual programs and systems this principle is sometimes called The Common Closure Principle. When it is applied to the information management of an enterprise, it is called SOA. [...]“

Em muitas empresas sem uma estratégia SOA, simples mudanças de regras de negócio provocam alterações em uma grande quantidade de sistemas (redundância de regras); e pequenas alterações no processo de negócio – para acompanhar a concorrência – são inviabilizadas, pois seria necessário refazer os sistemas envolvidos (regra de processo de negócio misturada com regras da aplicação), normalmente, elaborados para instanciar o processo com uma abordagem “integração espaguete”. Assim, os serviços existem para lidar com a complexidade.

Mesmo com uma ferramenta ESB eliminando a integração ponto a ponto, na ausência de serviços projetados para apoiar processos de negócio (ou seja, sem SOA), ainda teríamos “integração espaguete”, só que agora escondida dentro de uma ferramenta. Vídeo interessante relacionado com SOA sem ESB: Does My Bus Look Big in This?, Martin Fowler & Jim Webber, QCon London 2008. Um post também interessante relacionado: SOA, cuts the Gordian Knot — Not, Uncle Bob.

Serviços servem a propósitos diferentes e desempenham papéis muito distintos, por exemplo:



[1] Durante muito tempo, as empresas foram dirigidas por meio de metas estabelecidas para as áreas funcionais, mas hoje as metas são definidas para os processos essenciais, que constituem um nível fundamental de avaliação de desempenho da organização. (Rummler e Brache, 1990)

[2] A idéia de processo tem estado presente nos textos e nas discussões sobre Administração de Empresas nos últimos anos. É praticamente impossível evitar temas como redesenho de processos, organização por processos e gestão por processos. (José Ernesto Lima Gonçalve, Revista de Administração de Empresas, 2000)

Responses

[...] blog de SOA publicou um post de minha autoria. Este blog reúne consultores SOA com experiências distintas, atuando fortemente no [...]

Muito legal, Gustavo.
Interessante o conceito de agilidade. Sobretudo sob as mudanças no processo de negócio serem menos traumáticas quando se tem os processos executados através de serviços de negócio.

Uma dúvida sob a qual geralmente refletimos:

Pra você, em um cenário no qual o objetivo é “apenas” fazer composição de processos de negócio através de serviços. Qual a importância do ESB? (desconsiderando necessidades de integração)

Obrigado, Marcílio.

Conforme conversamos, concordo que ferramentas ESB são importantes em quase todos os cenários, fornecendo uma infra-estrutura para SOA como, por exemplo, lógica de compensação, transformação de dados, segurança, garantia de entrega, logging. Ainda todos os WS-*…

Vendedores de ferramentas ESB freqüentemente usam em suas apresentações uma figura clássica, que representa a complexidade de TI causando grande impacto visual. Em seguida, usando uma figura mais impressionante, mostram como ferramentas ESB podem organizar a casa, resolvendo todos os problemas.

No entanto, a verdadeira flexibilidade de SOA é obtida com serviços bem projetados, não com a adoção de ferramentas (muitos vendedores deixam essa impressão). Os serviços devem ser representativos para o negócio, seguindo certos princípios, como: low coupling, stable interface, entre outros.

Sem serviços bem projetados o cenário não muda muito: toda bagunça produzida no mundo corporativo, criando integrações espaguete, não some com a implantação de ESBs. Apenas fica escondida dentro do barramento, exigindo uma “lógica de conectividade” muito complexa.

[] s

Concordo com a opinião do Gustavo.
Já trabalhei em empresas que utilizam o Broker e o que acontece é que a complexidade das integrações passa para dentro dessa ferramenta.
Por um lado isso é bom porque o ESB / Broker passa a ser um ponto comum de comunicação e gera uma padronização fora os ganhos que o Gustavo já indicou acima.
Mas se o que está dentro do ESB / Broker não estiver muito bem documentado ficará quase impossível dar manutenção e suporte.
Em uma empresa onde implantaram o ESB pegaram a integração espaguete e deram um nó no meio. Este nó é o ESB.
Para desatar o nó apenas serviços bem projetados.

Esses são os caras. Concordo!
Pelo que estou percebendo é que o ESB pode ter dois papéis:
- pode servir de “forte integrador”,
- pode servir de “Tapete”, para jogarmos a sujeira de baixo :-)

[...] Continuação – Parte 1 [...]

[...] sem serviços bem projetados misturam lógica do fluxo do negócio (processo de negócio), lógica de conectividade e a lógica [...]

[...] dos posts: anatomia do serviço parte 1 e parte [...]

7f3mkbhki0h58xwj

Leave a response

Your response: