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)
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.