Arquitetura Hexagonal
Dr. Cockburn é um renomado consultor que entre outras contribuições, ajudou na criação do Agile Development Manifesto e no desenvolvimento de Use Cases. Ele definiu um pattern chamado Ports and Adapters (‘’Object Structural’’) ou “Hexagonal Architecture“.
O objetivo, como descrito no documento acima, é permitir que uma aplicação seja igualmente “conduzida” por usuários, programadores, testes automáticos ou scripts batch, e que seja desenvolvida e testada de forma isolada do seu ambiente e banco de dados de produção.
A idéia por trás deste pattern é isolar a aplicação (veja figura ao lado) e, à medida que eventos chegam em direção à aplicação através de uma porta (port), um adapter específico converterá este evento em uma chamada de procedure ou mensagem e encaminha a requisição, já traduzida, para a aplicação.
Independente do dispositivo ou ambiente onde esteja sendo executada, dos sinais recebidos e dos que precisam ser enviados ao “mundo exterior”, tudo isto precisa ser transparente para a aplicação.
Uma das motivações, de acordo com o autor, é prevenir um velho problema que encontramos em muitas aplicações: a inclusão de lógica de negócio no código da interface de usuário (GUI). Alguns problemas que isto traz:
- o sistema não pode devidamente testado porque parte da lógica é dependente de como os detalhes de apresentação da camada visual são apresentados
- pela mesma razão, é impossível simular a interação de um ser humano através, por exemplo, de um script batch (para fins de teste)
- difícil integração com outros programas ou sistemas devido ao alto acoplamento da camada de negócio com a camada visual
A proposta é que todas as funcionalidades estejam externalizadas através de uma API. Vários ports seriam criados para cada ator que precisa interagir com a aplicação: GUI, banco de dados, acesso via FTP, funções de teste etc. Veja a figura a seguir com alguns detalhes da fronteira da aplicação e as várias interações com o mundo:
Bom, e o que isto tem a ver com SOA? Eu acho que esta é uma excelente opção para fazer um wrapper em sua aplicação legada e inseri-la no meio-ambiente da sua arquitetura orientada a serviços.
Boa sorte!


