terça-feira, 25 de novembro de 2008

A Arquitectura Aplicacional — Análise de Características

[Este é o segundo artigo da série “A Arquitectura Aplicacional” I) Introdução III) Factores de Sobrevivência]

Depois de tão aplaudida estreia não tenho outro remédio senão continuar a série de artigos sobre a “A Arquitectura Aplicacional”. Agradeço, desde já, os hipotéticos futuros aplausos.

Hoje, ao ler (mais que tardiamente) o artigo do Joaquim Ferreira abriu-se-me o apetite para a escrita!

Tal como prometi no último artigo, vamos baixar a altitude. Colegas consultores: peço-vos que desabotoem os punhos das camisas e arregacem as mangas, pois vamos sujar um pouco as mãos [isto do consultor de colarinho branco e botões de punho não joga, nmho, muito bem com a programação, e com o trabalho em particular, também].

No último artigo concluímos que não existe uma só arquitectura aplicacional que seja adequada para servir todos os sistemas. Mas que, por outro lado, existem características de uma arquitectura que nos permitem classificar e escolher de entre as infinitas arquitecturas existentes. Que características são essas? As seguintes características são positivas:

  • simplicidade — a arquitectura é o mais simples possível, sem prejuízo dos seus fins, ou de outras características positivas; facilita a aprendizagem do seu funcionamento, reduz o número de potenciais erros, facilita a alteração
  • modularidade — estruturada por módulos (vários módulos cada um com diferentes funções); estes expõem as suas funcionalidades de maneira a que outros as possam utilizar facilmente; esta característica facilita a análise, a utilização, a alteração, a aferição [efectuar testes com padrões de Entrada/Saída] e possibilita a reutilização
  • composicionalidade — pressupondo um desenho modular,  os módulos podem utilizar outros módulos para cumprir a sua função; tal representa uma dependência que pode ser obrigatória ou facultativa; no último caso, se a dependência de um módulo não é satisfeita, algumas das funcionalidades do módulo dependente podem não estar activas
  • configurabilidade — capacidade de poder alterar ou ajustar a configuração de uma arquitectura através de parâmetros acessíveis externamente [a resposta à alteração dos parâmetros pode ou não ser imediata e automática, podendo estar sujeita a um comando de refrescamento, ou, no pior caso, ao reiniciar da aplicação]
  • adaptabilidade — a capacidade de adaptação/regulação, automática, a características variantes do meio ambiente (características extrínsecas do sistema)
  • robustez — força com que uma arquitectura resiste a condições adversas ou de excepção do meio ambiente; o conhecido teste do “macaco ao teclado” é uma condição de excepção para qualquer arquitectura, assim como lhe são adversas as falhas em linhas de comunicação e os períodos de sobrecarga no acesso a um componente servidor

Outras características positivas, muito abrangentes, mas, de fulcral importância:

  • eficácia — se uma arquitectura satisfaz os seus fins (a cada fim, ou sim ou não); por vezes olha-se para uma arquitectura acabada e apercebesse-se que ficou algo, esquecido ou adiado, de fora [confesso que a ortografia da anterior conjugação do verbo «aperceber» fui vê-la ao dicionário e, ainda assim, tenho dúvidas se a utilizei/escrevi bem :-) ]
  • eficiência (ou o inverso do desperdício) — o grau de aproveitamento dos recursos ambientais consumidos para o cumprimento do seus fins; a eficiência máxima, o valor 100%, corresponde a uma utilização dos recursos ambientais perfeita para o estrito cumprimento dos seus fins (apenas existe produção de valor e não existe desperdício); a eficiência mínima, o valor 0%, corresponde a um desperdício total: todos os recursos ambientais são gastos em fins que não os pretendidos, não sendo estes últimos sequer atingidos: o mesmo que a ineficácia!
  • ajustamento ao problema (ou a fidelidade da representação) — quão ajustada está uma arquitectura ao seu fim; quão fiel é a sua representação do problema; um desenho injusto (desajustado) do problema traz consigo ineficiência na composição e no funcionamento; repetidas vezes observo que a complexidade das aplicações se deve a infiéis representações do problema: é como os parafusos philips (em cruz), podem ser apertados com uma chave de fendas, normal, mas com desnecessário esforço.

Pois, a cada sistema, a arquitectura que lhe seja fiel.

Muitas outras características existem, com certeza [gostaria que o meu leitor imaginário comentasse sobre elas…].

Mas há uma que deixei de fora, de propósito, pois será o tema do próximo artigo.

Acabámos por não sujar mais do que a ponta dos dedos.

3 comentários:

Fernando Oliveira disse...

Olá Duarte, parabéns!

Não sei qual é teu guião para evoluir sobre o assunto mas, deixo aqui uma sugestão para abordares os principais Frameworks de Arquitectura.

MSF Agile
Zachman Framework
TOGAF
DODAF
MODAF
FEAF

Duarte Cunha Leão disse...

Muito obrigado Fernando...és o meu primeiro leitor (pelo menos que se acuse!).
Quanto ao guião...na verdade não existe, pelo menos escrito. Há sim uma infinidade de ideias que quero partilhar, e que vou procurar estruturar e apresentar de uma forma consistente.
Contrastando com os ponteiros que deixaste...fico até embaraçado :-)(
Vou precisar de bastante tempo para poder explorar tudo isso.
O que escreverei será acerca da arquitectura das aplicações, em geral, e não, ligado a alguma metodologia.
Mesmo sabendo (agora) que existem tais metodologias para a especificação de Arquitecturas Empresariais, não me atreveria a vir falar de algo que não sei... Por isso, (devolvo-te a bola e) peço-te que escrevas do que souberes, para todos aprendermos. Eu estarei a ler.

A partir dos ponteiros que referiste cheguei aqui.

Fernando Oliveira disse...

Claro que sou seu leitor! E não só. Sou leitor assíduo do Blog :-) Só tenho pena de não ter o tempo necessário para partilhar as minhas experiências sobre os temas Performance & Segurança em .NET. Mas, estou já a preparar o meu próximo post. É já para este fim-de-semana.
Quanto a bola que passaste-me, vou deixá-la em 'stand by'. Apesar de eu estar a fazer um 'upgrade' em minha carreira -Desenvolvedor/Arquitecto- ainda preciso de algumas competências para falar sobre o assunto. Por isso...Vou continuar, sempre que puder, a abordar Performance & Segurança em .NET.