Fala, meus consagrados! Tudo beleza com vocês?

Conceituação
É a estrutura fundamental de um sistema, compreendendo seus componentes, os relacionamentos entre esses componentes e os princípios que orientam sua organização e evolução.
É responsável por definir decisões de alto nível, que possuem impacto significativo e duradouro sobre o sistema, especialmente no que se refere a atributos de qualidade.
Não se confunde com a implementação nem com decisões pontuais de codificação. Ela estabelece o arcabouço estrutural sobre o qual o software será construído, delimitando responsabilidades, dependências e formas de comunicação entre partes do sistema.
É definida como a organização fundamental de um sistema, composta por seus componentes, seus relacionamentos entre si e com o ambiente, além dos princípios que norteiam sua concepção e evolução.
Representa o elo crítico entre o projeto e a engenharia de requisitos, fornecendo uma visão de alto nível que permite a comunicação com os stakeholders e o reúso em larga escala.
Objetivos
A arquitetura de software tem como objetivo principal viabilizar o atendimento aos requisitos funcionais e, sobretudo, aos requisitos não funcionais. Em especial, a arquitetura está diretamente relacionada a atributos de qualidade como desempenho, escalabilidade, manutenibilidade, segurança e disponibilidade.
Decisões arquiteturais implicam compromissos (trade-offs) entre esses atributos. Assim, a arquitetura influencia diretamente a qualidade global do software, sendo inadequado atribuir exclusivamente à fase de codificação a responsabilidade por tais características.
Decisões e atributos de qualidade
O projeto arquitetural não foca no “como” (detalhes de algoritmo), mas no “o quê” (estrutura e organização).
A escolha da arquitetura impacta diretamente os requisitos não funcionais (atributos de qualidade):
- Desempenho: arquiteturas que localizam operações críticas em poucos componentes para minimizar comunicações;
- Segurança (Safety): operações críticas localizadas em componentes isolados para facilitar a validação;
- Proteção (Security): uso de estruturas em camadas para proteger ativos críticos;
- Disponibilidade: inclusão de componentes redundantes e mecanismos de recuperação de falhas; e
- Manutenibilidade: uso de componentes autocontidos e de baixa granularidade para facilitar alterações.
Arquitetura de Software vs Projeto de Software
Não se confundem, embora sejam atividades complementares:
- A arquitetura atua em um nível mais alto de abstração, definindo a estrutura macro do sistema e suas diretrizes fundamentais; e
- O projeto de software, por sua vez, trata do detalhamento interno dos componentes, incluindo classes, métodos, estruturas de dados e algoritmos.
Enquanto a arquitetura orienta decisões estruturais iniciais e de longo prazo, o design é mais suscetível a ajustes incrementais ao longo do desenvolvimento. Assim, a arquitetura precede e orienta o design, mas não elimina a necessidade deste.
Visões de Arquitetura (Modelo 4+1 de Kruchten)
Um sistema não pode ser descrito por um único modelo, mas exige múltiplas perspectivas:
- Visão Lógica: mostra as abstrações do sistema como objetos ou classes;
- Visão de Processo: foca no comportamento em tempo de execução e interação entre processos (importante para desempenho e disponibilidade);
- Visão de Desenvolvimento: mostra a decomposição do software em componentes para as equipes de implementação;
- Visão Física: descreve o hardware e a distribuição física dos componentes nos processadores; e
- Cenários (ou Casos de Uso): relacionam as visões anteriores, demonstrando como elas trabalham juntas.
Conceito de Padrões Arquiteturais
São soluções recorrentes e consolidadas para problemas estruturais comuns na arquitetura de sistemas de software. Eles descrevem organizações típicas de componentes, seus papéis e suas formas de interação, sem impor tecnologias específicas.
O uso de padrões arquiteturais não garante qualidade por si só, mas fornece um referencial que auxilia na tomada de decisões arquiteturais consistentes e alinhadas a objetivos de qualidade.
Principais Padrões Arquiteturais
Arquitetura em Camadas
Caracteriza-se pela organização do sistema em níveis hierárquicos, nos quais cada camada é responsável por um conjunto específico de funcionalidades. Organiza o sistema em níveis, onde cada camada fornece serviços para a superior.
Implica separação de responsabilidades, mas pode introduzir sobrecarga de comunicação entre camadas.
Apoia o desenvolvimento incremental e a portabilidade, embora possa ter problemas de desempenho devido aos múltiplos níveis de interpretação.
Arquitetura Cliente-Servidor
Baseia-se na separação entre provedores de serviços (servidores) e consumidores desses serviços (clientes).
Caracteriza-se pela centralização de recursos e pela dependência dos clientes em relação ao servidor.
Pode ser:
- De duas camadas (cliente-magro ou cliente-gordo); ou
- Multicamadas (mais escalável).
Padrão MVC (Model–View–Controller)
Promove a separação entre a lógica de negócio, a apresentação e o controle das interações.
Separa a apresentação e a interação dos dados do sistema em três componentes lógicos:
- Modelo gerencia os dados;
- Visão gerencia a apresentação; e
- Controlador gerencia a interação do usuário.
É a base para muitas aplicações Web e é frequentemente associado a interfaces gráficas, mas seu propósito principal é estrutural, não visual.
Arquitetura Monolítica
Caracteriza-se pela implementação do sistema como uma única unidade implantável, na qual os componentes são fortemente integrados.
Simplifica a implantação, mas pode dificultar a evolução e a escalabilidade.
Repositório (Repository)
Componentes independentes interagem por meio de um banco de dados centralizado.
É ideal para sistemas com grandes volumes de dados compartilhados, mas o repositório central é um ponto único de falha.
Duto e Filtro (Pipe and Filter)
Baseado em transformações funcionais (filtros) conectadas por dutos que transmitem dados de um para o outro.
É comum em sistemas de processamento de dados e compiladores.
Ponto-a-Ponto (Peer-to-Peer)
Sistema descentralizado onde não há distinção entre clientes e servidores: qualquer nó pode realizar processamento.
Arquitetura de Microsserviços
Organiza o sistema como um conjunto de serviços pequenos, independentes e autônomos. Cada serviço é responsável por uma funcionalidade específica, o que implica maior complexidade de comunicação e gerenciamento distribuído.
Arquitetura Orientada a Eventos
Baseia-se na produção, detecção e reação a eventos.
Os componentes são desacoplados temporalmente, o que favorece escalabilidade e flexibilidade, mas pode dificultar o rastreamento do fluxo de execução.
Arquiteturas modernas e nuvem
A Computação em Nuvem e o SaaS (Software como Serviço) representam mudanças de paradigma, oferecendo recursos de infraestrutura e aplicação sob demanda via Internet:
- SaaS: o software é hospedado remotamente, de propriedade do fornecedor e acessado via browser;
- Multilocação (Multi-tenancy): arquitetura que permite que múltiplos clientes compartilhem os mesmos recursos de sistema de forma isolada e eficiente; e
- SOA (Arquitetura Orientada a Serviços): estrutura o sistema como um conjunto de serviços autônomos e independentes de linguagem, que se comunicam via mensagens baseadas em padrões como XML, SOAP e WSDL.
Vantagens e limitações
Os padrões arquiteturais favorecem a padronização de soluções, a comunicação entre equipes e a previsibilidade estrutural. Contudo, sua adoção implica limitações e compromissos, sendo inadequado supor que um padrão seja universalmente superior a outro.
A escolha de um padrão arquitetural implica impacto direto na complexidade, na manutenção e na evolução do sistema, devendo ser orientada pelos requisitos e pelo contexto.
Arquitetura, qualidade, acoplamento e coesão
A arquitetura de software está diretamente relacionada à qualidade estrutural do sistema.
Arquiteturas bem definidas tendem a promover baixo acoplamento entre componentes e alta coesão interna, o que implica maior facilidade de manutenção e evolução.
A evolução do sistema depende da capacidade da arquitetura de absorver mudanças sem comprometer sua estabilidade. Assim, arquitetura inadequada tende a gerar rigidez estrutural e aumento do custo de manutenção.
Resumo
- Arquitetura define estrutura, componentes e decisões de alto nível;
- Arquitetura é responsável por atributos de qualidade;
- Arquitetura não se confunde com projeto;
- Padrões arquiteturais são soluções estruturais recorrentes;
- Não existe padrão arquitetural universalmente superior;
- Acoplamento e coesão são influenciados por decisões arquiteturais; e
- Arquitetura impacta diretamente a evolução do sistema.
Visão geral

É isso aí, galera.
[]’s e até a próxima.
——————————————
Professor Rogerão Araújo
www.instagram.com/profRogeraoAraujo
www.youtube.com/@profrogeraoaraujo