Fundamentos da Arquitetura de Software - Capitulo 4
O design estrutural na arquitetura de software não acontece por acaso. Ele é composto principalmente por duas atividades fundamentais: a análise de características arquiteturais e o design de componentes lógicos. Mas o que exatamente são essas características e como elas moldam os sistemas que construímos?
Fundamentos da Arquitetura de Software - Capítulo 4
Por muito tempo, a indústria utilizou termos como "requisitos não funcionais" ou "atributos de qualidade". No entanto, a visão arquitetural moderna prefere o termo Características Arquiteturais. O motivo é simples: esse termo descreve preocupações que, embora não sejam regras de negócio, são absolutamente críticas para o sucesso e a sustentação da arquitetura.
O Que Define uma Característica Arquitetural?
Para que um requisito ganhe o "selo" de característica arquitetural, ele precisa atender obrigatoriamente a três critérios:
1. Não ser do domínio: Especifica uma consideração de design, e não uma regra de negócio da aplicação. As características definem o como e o porquê das escolhas, não o o quê.
2. Influenciar a estrutura do design: Identifica considerações que afetam diretamente o esqueleto e o formato do sistema.
3. Ser crítico para o sucesso: Sem essa característica, a aplicação simplesmente falha em seu propósito técnico ou de negócios.
Essas características podem ser explícitas (claramente definidas em documentos de requisitos) ou implícitas (raramente documentadas, mas essenciais para o sucesso do projeto).
O Custo da Complexidade: Menos é Mais
É tentador olhar para uma lista de características e querer que o sistema suporte todas elas. No entanto, os arquitetos devem ter muito cuidado:
Cada característica arquitetural que um sistema suporta adiciona complexidade ao seu design. Por isso, o papel do arquiteto não é acumular características, mas sim se esforçar para escolher o menor número possível que garanta o sucesso da aplicação.
As 4 Categorias de Características Arquiteturais
Para organizar o pensamento e as decisões de design, podemos dividir as características arquiteturais nas seguintes categorias:
1. Operacionais
Focam em como o sistema se comporta enquanto está rodando no ambiente de produção.
. Exemplos: Disponibilidade, Continuidade, Desempenho, Recuperabilidade, Confiabilidade/Segurança, Robustez e Escalabilidade.
2. Estruturais
Dizem respeito à estrutura do código e são de responsabilidade direta do arquiteto, garantindo a qualidade interna do software e o controle do acoplamento.
. Exemplos: Configurabilidade, Extensibilidade, Instabilidade, Reaproveitamento, Localização, Manutenibilidade, Portabilidade e Capacidade de atualização.
3. Nuvem (Cloud)
Com a evolução do ecossistema de software, a computação em nuvem trouxe um novo conjunto de preocupações específicas.
. Exemplos: Escalabilidade sob demanda, Elasticidade sob demanda, Disponibilidade baseada em zonas e Privacidade/segurança baseadas em regiões.
4. Transversais (Cross-cutting)
São características que permeiam todo o sistema, não se limitando a um único componente ou categoria.
Exemplos: Acessibilidade, Arquivabilidade, Autenticação, Autorização, Conformidade legal, Privacidade, Segurança, Suportabilidade e Usabilidade/Viabilidade.
A Regra de Ouro da Arquitetura
Se houvesse apenas uma lição para tirar do design e da escolha de características arquiteturais, seria entender a natureza dos trade-offs. Em arquitetura de software, a perfeição não existe.
"Nunca tente obter a melhor arquitetura; vise obter a arquitetura menos pior."
Toda escolha arquitetural cobra um preço. O bom arquiteto é aquele que escolhe as características certas e constrói a "arquitetura menos pior" possível para resolver o problema atual.