A arquitetura de software de um sistema consiste na definição components de software, suas propriedades externas e seus relacionamentos com outros softwares.
O que define uma boa arquitetura de software
<mark style="background: #FF5582A6;">Complexidade acidental:</mark> É aquela que é decorrente da solução adota
Ex Escolher entre utilizar monolitos ou microserviços, frameworks A ou B, banco de dados relacionais ou não relacionais são exemplos de complexidade acidentais
<mark style="background: #ABF7F7A6;">Complexidade essencial:</mark> É aquela que é inerente ao problema a ser resolvido
Ex A coordenação de motoristas de aplicativos, ou seja, identificar os motoristas disponíveis nas imediações da solicitação de uma chamada, faz parte do problema não podendo ser evitada.
Design de software, é visto como uma organização de baixo nível dos componentes, ou seja, no nível do código como módulos, classes e funções
![[Pasted image 20231018090107.png]]
Um <mark style="background: #ADCCFFA6;">estilo arquitetural</mark> define como o código é organizado sob uma perspectiva de alto nível, ou seja, como os módulos de alto nível de uma aplicação estão relacionados. Exemplos de estilos arquiteturais