Olá a todos! Tenho o prazer de apresentar uma nova série em meu blog, dedicada à arquitetura de software. Esta série foi inspirada pelo meu trabalho de mestrado na Escola Politécnica da Universidade de São Paulo, intitulado “Guideline para Determinação dos Padrões de Comunicação a Serem Utilizados em Sistemas de Microsserviço Construídos Através da Abordagem Domain-Driven Design”.
Nesta série, exploraremos alguns estilos arquiteturais, incluindo o monolítico e o distribuído. Daremos especial atenção à arquitetura de microsserviços, uma das mais prevalentes no mercado atual.
Neste artigo discutiremos os conceitos de arquitetura de software, estilos arquiteturais e suas respectivas vantagens e desvantagens.
1. O que é Arquitetura de Software?
De acordo com Bass, Clements e Kazman (2021, p. 29, tradução nossa) “A arquitetura de software é o conjunto de estruturas necessárias para compreender sobre um sistema. Essas estruturas abrangem elementos de software, como esses elementos se relacionam, e sobre as suas propriedades.” Por consequência, a partir da definição de Bass, Clements e Kazman (2021), pode-se concluir que todo sistema de software possui uma arquitetura, uma vez que sistemas são constituídos de elementos e relações.
Bass, Clements e Kazman (2021) complementam a definição de arquitetura afirmando que a compreensão ocorre através da abstração do sistema que se dá por meio da exposição de certos detalhes e ocultação de outros.
Em consonância com Bass, Clements e Kazman (2021), Richardson (2018) afirma que a arquitetura de um sistema é sua representação em alto nível, consistindo de estruturas e dependências entre essas estruturas.
Ambos os autores, Richardson (2018) e Bass, Clements e Kazman (2021), afirmam que a organização dos componentes que compõem a arquitetura colabora para se atingir atributos de qualidades como confiabilidade, escalabilidade e segurança.
Bass, Clements e Kazman (2021) definem o objetivo da arquitetura como sendo o de dar suporte para construção de um sistema visando atender os objetivos do negócio. Dessa forma, o grande propósito das decisões arquiteturais é cumprir com os requisitos funcionais e atributos de qualidade estipulados pelo negócio e stakeholders.
Sem a definição dos requisitos, as decisões de arquitetura são superficiais e muitas vezes prejudiciais uma vez que cada conjunto de decisões possui trade-offs que 29 favorecem certos aspectos e qualidades do sistemas e prejudicam outros (VERNON, JASKULA, 2021).
Referências
BASS, Len; CLEMENTS, Paul; KAZMAN, Rick. Software Architecture in Practice. 4th ed. Boston: Addison-Wesley, 2021. 464 p. ISBN: 978-0-13-688609-9. RICHARDSON, Chris. Microservices Patterns: With Examples in Java. 1st ed. Shelter Island: Manning Publications Co. 2018. 520 p. ISBN: 978-1617294549. VERNON, Vaughn; JASKULA, Tomasz. Strategic Monoliths and Microservices. 1st ed. Boston: Addison-Wesley, 2021. 352 p. ISBN: 978-0-13-735546-4.