Outros 3 Padrões de Arquitetura de Software Simplificados e Exemplificados
Tags: architecture, programming, design, patterns
Published: 2023-02-14 18:51:55

Hoje eu trago outros três padrões bem comuns de arquitetura de software para explorarmos. Todos criados para atender necessidades específicas e tornar o desenvolvimento de software mais eficiente e fácil.

### 1. Arquitetura em Camadas

A arquitetura de software em camadas é uma estrutura que divide o software em diferentes camadas, cada uma com sua própria responsabilidade e finalidade. Cada camada depende das camadas abaixo dela, mas não depende das camadas acima. Isso cria uma estrutura em forma de "pirâmide", onde cada camada é construída sobre as camadas anteriores e fornece suporte para as camadas superiores.

1. Camada de Apresentação (UI)
 - Responsável por apresentar as informações para o usuário final.

2. Camada de Aplicação
 - Responsável por lidar com as regras de negócio e os processos de negócio da aplicação.

3. Camada de Domínio 
 - Responsável por armazenar e recuperar informações.

4. Camada de Infraestrutura 
 - Responsável pelas informações no banco de dados.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/86bzln33cwrpa66medlo.png)

#### Vantagens
- Fácil de entender e de se aplicar.
- Cada camada tem sua própria finalidade distinta, sendo mais fácil manter o software e realizar mudanças ou atualizações.

#### Desvantagens
- Escalabilidade é complicado pois a estrutura não permite fácil crescimento.
- Existe uma certa dependência entre as camadas da estrutura.

#### Exemplo em um cenário real

Um sistema de E-commerce:

1. Camada de Interface:
 - Essa será a interface do usuário, permitindo que os clientes visualizem produtos e façam compras.
2. Camada de Aplicação:
 - Aqui funciona a lógica de negócios, como cálculo de preços, gerenciamento de estoque e processamento de pagamentos.
3. Camada de Domínio:
 - Recupera informações relevantes do sistema, como informações do produto ou histórico de compras.
4. Infraestrutura:
 - Um servidor rodando PostgreSQL com os dados necessários para o funcionamento do E-commerce.

### 2. Padrão Broker

Broker é uma arquitetura de sistemas distribuídos em que um componente intermediário, chamado de broker, atua como uma peça entre diferentes componentes distribuídos. O broker por sua vez, é responsável por receber mensagens enviadas por um componente e encaminhá-las para o componente apropriado.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qp5s1s8v00zod7m366uh.png)

#### Vantagens
- Permite que componentes diferentes possam ser adicionados ou removidos do sistema sem afetar o restante dos componentes.
- Pode ser tolerante a falhas, ou seja se um componente falhar, o broker pode redirecionar as mensagens para um componente de backup ou tomar outras medidas para garantir que o sistema continue funcionando.

#### Desvantagens
- A adição de um componente intermediário pode aumentar a complexidade do sistema.
- A arquitetura de software Broker pode ter um impacto negativo no desempenho do sistema.

#### Exemplo em um cenário real

Chat online:

O broker atua como um intermediário para rotear mensagens de chat entre usuários. Quando um usuário envia uma mensagem para outro, a mensagem é enviada para o broker, que a encaminha para o destinatário correto.

Também pode ter a capacidade de armazenar mensagens offline e coordenar a entrega de mensagens quando o destinatário estiver online novamente, garantindo que as mensagens não sejam perdidas.

### 3. Arquitetura Peer-to-peer

Arquitetura distribuída em que os componentes têm capacidade tanto de fornecer quanto de consumir recursos. Cada componente da rede P2P é chamado de peer, e eles se comunicam entre si diretamente, sem a necessidade de um servidor central para coordenar as comunicações.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qej6ri6qd01ab1lyzh9.png)

#### Vantagens
- Cada dispositivo é considerado um nó e pode participar das atividades da rede, o que significa que a rede pode crescer sem um limite de tamanho.
- Não há necessidade de um servidor central que controle a rede.

#### Desvantagens
- Confiabilidade da rede depende da disponibilidade e da qualidade dos dispositivos individuais na rede.
- O tráfego de dados é compartilhado entre os dispositivos na rede, o que pode resultar em uma largura de banda insuficiente.

#### Exemplo em um cenário real

BitTorrent:

Nesta rede, os usuários podem baixar e compartilhar arquivos diretamente entre si, sem a necessidade de um servidor central. Cada usuário é considerado um nó na rede e pode fornecer e obter arquivos de outros usuários. Dessa forma, a rede é capaz de lidar com uma grande quantidade de tráfego de dados, pois cada usuário contribui para o compartilhamento dos arquivos.

### Finalizando...

Este foram outros três padrões que temos na arquitetura de software, trarei mais num futuro próximo.

Espero que isso ajude você de alguma maneira! 😄

Happy Coding!

Links úteis:
[Broker Pattern](https://medium.com/@lalosaimi/broker-pattern-297ac3cff6c5)
[Arquitetura em camadas](https://imasters.com.br/arquitetura-da-informacao/arquitetura-em-camadas)
[Peer-to-peer](https://student.cs.uwaterloo.ca/~cs446/1171/Arch_Design_Activity/Peer2Peer.pdf)