Guia Rápido: Arquitetura de Software


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

Deixe um comentário

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.