Arquitetura
A etapa de Arquitetura traz a estrutura organizacional de um sistema, incluindo sua decomposição em partes, sua conectividade, seus mecanismos de interação e os princípios e decisões que orientam no desenvolvimento de um sistema.
[Gather Requirements] -> [Analyze in Real World Context] -> [Develop the Architecture]
As três fundamentais etapas são:
- Cenário: Descrevendo o problema.
- Análise: O que fazer para solucionar o problema?
- Projeto: Como fazer para solucionar o problema?
O guia para etapas são através dos Princípios, Padrões e Práticas.
Princípios, Padrões e Práticas
Os princípios, padrões e práticas são as bagagens de experiências do desenvolvedor sobre a etapa de Arquitetura - com a adição de complexidade adicional na maioria dos casos: enquanto os princípios trazem as sugestões e recomendações de expressões idiomáticas para a criação do software, os padrões trazem a formalização dos princípios em pares de problema/solução para serem aplicados e moldados aos contextos de software, por fim as práticas trazem as atividades/técnicas executadas durante o projeto pela abordagem filosófica e científica.
Os problemas são:
detectados pelas Práticas,
diagnosticados pelos Princípios,
solucionados pelos Padrões, e
regulados pelos Antipadrões.
Os mais utilizados/aplicados são:
- Práticas (Práticas Comuns)
- Princípios (Princípios Gerais)
- SOLID (Princípios de Projeto)
- GRASP (Padrões Fundamentais)
- PLoP (Padrões de Projeto)
- GoF (Padrões de Projeto)
- POSA (Padrões de Arquitetura)
- Antipadrões (Antipadrões)
Pontos importantes:
Trade-off: os padrões de projeto são utilizados conforme um equilíbrio entre espaço e tempo dos recursos computacionais.
4 elementos essenciais: nome do padrão, problema, solução e consequências.
Outros
Dentre os pontos importantes estão:
Etapa Zero: a etapa/iteração zero é a primeira atividade, na qual utiliza o cenário mais simples (World ou Walking Skeleton) e representativo do projeto, assim validando o ambiente de desenvolvimento (IDE, Controle de Versão, Servidores, Frameworks, Rigs, etc...).
Arquiteturas Modernas: novos estudos de arquiteturas para a representação de software, baseadas em variantes da arquitetura Ports-And-Adapters, tais como: Hexagonal, Onion e Clean.