Capacidades e Framework Arquitetural

Quais são as capacidades necessárias para a arquitetura dos sistemas que comumente encontramos na atualidade? Dê uma olhada na figura abaixo...

image

Nela você vê a proposta do Simon Guest, diretor do time de Estratégia de Arquitetura da Microsoft. Para ele as principais capacidades são:

  • Fundamento computação: isto é, onde e como roda nosso software? Virtualizado ou não? Hospedado internamente ou em um fornecedor? Hardware dedicado ou compartilhado?
  • Infra-estrutura: Como é tratada a identidade e autorização? Como são implementadas as mensagens? O armazenamento é estruturado, relacional ou tradicional/baseado em arquivos? O workflow é baseado em eventos ou necessita alto volume/taxa de transferência?
  • Serviços de Aplicativo: uma lista de capacidades que uma aplicação pode exigir, como colaboração, monetização, composição, regras de negócio, BI, Workflow, formatos e protocolos para a exposição de API’s e formato de entrega para a Web.
  • Serviços no Cliente: uso ou não de RIA no browser? Apresentação e comunicação com o dispositivo móvel usando que tecnologia? Idem com o PC e dispositivos incorporados (embedded).

Com esta estruturação, podemos agora compor as capacidades para obter estilos de aplicações.

Exemplos:

Um Wiki costuma ter uma apresentação em HTML e usa fortemente as capacidades de colaboração e armazenamento tradicional. Se for hospedado de modo compartilhado em um fornecedor teríamos a configuração abaixo:

image

Um provedor SaaS, baseado em web, com serviços para clientes off-line poderia ter a seguinte configuração:

image

Infelizmente não achei esta apresentação para passar o link a vocês (se conseguir tomar coragem, tento reproduzi-la eu mesmo nos WebCasts de arquitetura).

Mas o importante aqui é o estilo: pense você também em capacidades antes de montar seu framework para a sua empresa, produto ou família de produtos. Esta é uma forma estruturante de pensar que, creio eu, contribui com melhor reuso e separação lógica entre camadas.