Capacidades, Arquitetura e SOA

Uma das armas mais importantes usadas pelos arquitetos de TI ao longo dos últimos tempos tem sido a noção de capacidade.

Por definição, capacidade é a habilidade de executar uma determinada ação, e compreender de antemão que capacidades um sistema ou uma infraestrutura deve ter é função do arquiteto. Com esta análise em mãos ele pode trabalhar em subsistemas ou serviços que poderão fornecer estas habilidades respeitando a separação de propósitos (SoC - separation of concerns).

Vamos aos exemplos: poder enviar uma mensagem; autorizar e/ou autenticar um usuário; acessar dados; chamar serviços; executar fórmulas; etc.

Em cada um destes exemplos podemos conceber sistemas como o Exchange ou o Active Directory, bibliotecas como o Entity Framework, executáveis como um interpretador, e assim por diante.

Pensar em capacidades é elevar a abstração a um ponto relativamente estável. Ela indica o que queremos fazer e não o como fazer. Continuando o exemplo acima: podemos pensar em um dia substituir o Exchange por um processo smtp ou um Exchange na Nuvem – quem sabe? No entanto, ainda demorará a chegar o dia em que o conceito de envio de e-mail não existirá mais.

Outro benefício é que capacidades têm grande possibilidade de virarem Serviços. Exatamente porque a SoC foi alcançada, poderemos pensar em utilizar serviços remotos ou locais (com patterns de IoC ou uso de Interfaces), estruturando melhor a arquitetura e aumentando, provavelmente, o reuso.

O grande inimigo desta análise das capacidades é identificar os subsistemas ou serviços e pular direto para a sua implementação sem antes garantir outros atributos importantes para o(s) sistema(s). Exemplo: desempenho. Alguns serviços podem estar em uma localidade distante, criando uma latência inaceitável para quem o chama. Outro: escalabilidade. Alguns serviços funcionam bem em regime de baixa demanda, mas podem tornar-se sofríveis com o aumento da demanda.

Ambos os exemplos não são problemas da noção da capacidade, mas da adequação de uma implementação desta capacidade num contexto real.

Em resumo: bons arquitetos pensam abstratamente para organizar o espaço da implementação de suas soluções e infraestruturas. Pensar em capacidades é comprovadamente uma boa heurística.

Abraços