DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on • Edited on

Arquitetura de Software

Introdução à Arquitetura de Software

A arquitetura de software é o campo geral que engloba todas as práticas, padrões e decisões relacionadas à estrutura (esqueleto) de um determinado sistema. Serve como um guarda chuva para os demais tópicos. Podemos dizer que é um conjunto de normas e decisões que orientam o desenvolvimento, especificando módulos, interfaces, fluxos de dados entre outros. O objetivo é garantir que o sistema atenda os requisitos técnicos do sistema. A escolha impacta diretamente no produto final. Uma escolha errada pode impactar o desempenho, qualidade de código, manutenção, flexibilidade e portabilidade do sistema. Uma boa arquitetura não só melhora a qualidade e a sustentação do software como também reduz custos e riscos de retrabalho ao longo do ciclo de vida do sistema.

O objetivos principal da leitura posterior será entender conceitos que desenvolvedores têm dificuldades de definir assertivamente durante a arquitetura de um software. O artigo introduz de modo genérico sobre os fundamentos da arquitetura, portanto, o objetivo principal é esclarecer a diferença conceitual dentro da Arquitetura de Software que muitas pessoas confundem: arquitetura de software, modelo de arquitetura, padrões de projetos arquiteturais e padrões de projetos estruturais.

Entendendo a diferença entre os conceitos

Os desenvolvedores geralmente confundem os termos citados acima termos porque eles geralmente:

  • Possuem terminologia parecida (todos utilizam palavras como “padrão” ou “arquitetura”
  • Se sobrepõe no conceito. Um projeto pode conter vários padrões e padrões são usados na arquitetura

A seguir, irei separar os conceitos com explicações diretas, com exemplos práticos e analogias, depois, irei fazer um resumo comparativo e explica-los como eles se conectam, imaginando um projeto real.

1. Modelo de Arquitetura de Software (Architecture Model)

Um esquema macro de organização de um sistema. Define como o sistema é dividido em camadas, módulos ou componentes.

Analogicamente falando, podemos dizer que é a planta baixa de um prédio. Ela diz onde estão os cômodos e como eles se conectam.

Modelo Descrição básica
Camadas (Layered) Separação em camadas: Apresentação → Aplicação → Domínio → Dados
MVC Model-View-Controller, separa UI, lógica e dados
Clean Architecture Núcleo da regra de negócio isolado de tudo (Domínio no centro)
Onion Architecture Como a Clean, mas com camadas concêntricas com dependências invertidas
Hexagonal (Ports & Adapters) Entradas e saídas conectadas ao domínio central via portas/adaptadores

2. Padrão de Projeto Arquitetural (Architectural Design Pattern)

Um conjunto de boas práticas e estratégias para estruturar um sistema seguindo regras de comunicação entre os componentes. Ele resolve problemas de organização e acoplamento entre camadas/módulos definidos pelo modelo de arquitetura de software.

Analogicamente falando, é como construir o prédio: técnicas e regras para manter a estrutura saudável, como usar concreto armado ou vigas metálicas.

Padrão Arquitetural Papel
DDD (Domain-Driven Design) Organiza o sistema em torno do domínio
CQRS (Command Query Responsibility Segregation) Separa comandos (alterações) de queries (leitura)
Event Sourcing Armazena eventos em vez de estados finais
Microservices Divide a aplicação em serviços pequenos e independentes
Serverless Executa funções sob demanda na nuvem

3. Padrão de Projeto Estrutural (Structural Design Pattern)

Padrão de nível de código, que resolve roblema de estrutura entre os objetos e classes no sistema. Ajuda a montar o sistema por dentro, com foco em acoplamento, composição, organização de objetos e classes.

Analogicamente falando, são os materiais e estruturas específicas dentro do prédio, como usar paredes de drywall, portas de correr ou tubulação de cobre.

Padrão Estrutural Descrição
Repository Abstrai o acesso a dados
Adapter Adapta interfaces incompatíveis
Decorator Adiciona funcionalidade a um objeto sem alterar seu código
Facade Interface simples para subsistemas complexos
Composite Trata objetos individuais e coleções de forma uniforme
Proxy Controla o acesso a outro objeto
Bridge Separa abstração de implementação

Resumo comparativo:

Conceito Nível Foco Exemplo
Modelo de Arquitetura Macro Organização do sistema Clean Architecture, MVC
Padrão de Projeto Arquitetural Meio Estratégia de estrutura DDD, CQRS, Microservices
Padrão de Projeto Estrutural Micro Estrutura entre classes/objetos Repository, Adapter, Decorator

Como eles se conectam?

🧠 Clean Architecture (modelo)
     usa DDD + CQRS (padrões arquiteturais)
         implementa Repository, Adapter, Facade... (padrões estruturais)
Enter fullscreen mode Exit fullscreen mode

Exemplo em C#:

  • Modelo de arquitetura: Clean Architecture
  • Padrão arquitetural: CQRS
  • Padrões estruturais no código: IProdutoRepository, EmailAdapter, RelatorioFacade

👉🏻 Modelos de Arquitetura
👉🏻 Padrões de Projetos Arquiteturias
👉🏻 Padrões de Projetos Estruturais

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.