Como já abordado no post anterior, Arquitetura de Software é um aspecto crítico do desenvolvimento de software que envolve a definição da estrutura geral de um sistema para atender aos requisitos e restrições do problema a ser resolvido. Diversas vezes esses problemas são muito parecidos, fazendo assim possível aplicar determinados tipos de arquitetura existentes.
Hoje eu trago três padrões comuns de arquitetura de software, criados e utilizados para servir um propósito específico.
1. Model-View-Controller (MVC)
O MVC oferece uma clara separação de preocupações, o que torna o código mais fácil de entender, manter e modificar. Este padrão é amplamente utilizado no desenvolvimento de aplicativos desktop e web.
Este padrão separa a aplicação em três componentes principais:
- Model:
- Os dados e a lógica de negócios da aplicação. Armazena e manipula dados e define as regras para como os dados podem ser usados.
- View:
- Responsável por exibir os dados para o usuário. Fornece a interface do usuário e recebe entradas do usuário.
- Controller:
- Fica entre os componentes Model e View. Recebe entradas do usuário da View, processa essas entradas e atualiza o Model de acordo.
Vantagens
- Separação de preocupações, dividindo a aplicação em três componentes distintos.
- A apresentação de dados é separada das regras de negócio e do controle.
Desvantagens
- Pode se tornar complexo quando aplicado a aplicações grandes e complexas.
- Pode haver um forte acoplamento entre os componentes, o que pode tornar a aplicação mais difícil de manter e modificar.
Exemplo em um cenário real
Uma aplicação de player de música:
- Model:
- A biblioteca de música, incluindo as músicas, playlists e metadados. Armazena e manipula os dados.
- View:
- A interface do usuário do player de música, incluindo playlists, capas de álbuns e informações sobre a música. Exibe os dados para o usuário e recebe entradas do usuário, como tocar, pausar, pular e embaralhar.
- Controller:
- O código que manipula as entradas do usuário, como tocar, pausar, pular e embaralhar, e atualiza o Model.
2. Arquitetura de Micro-serviços
Projetada para grandes aplicações de software, quebradas em pequenos serviços independentes que se comunicam entre si por uma rede. Cada micro-serviço é responsável por uma função específica, como autenticação de usuários, gerenciamento de catálogo de produtos ou gerenciamento de pedidos.
Vantagens
- É possível escalar individualmente cada serviço, de acordo com as necessidades, sem afetar o funcionamento dos outros serviços.
- Cada serviço pode ser desenvolvido, implantado e atualizado independentemente, o que facilita a manutenção e evolução da aplicação.
- Se um serviço falhar, isso não afetará o funcionamento dos outros serviços, o que aumenta a disponibilidade e robustez da aplicação.
Desvantagens
- O gerenciamento e integração de vários serviços pode ser complexo e desafiador.
- A comunicação entre serviços através de uma rede pode resultar em latência e impactar o desempenho da aplicação.
Exemplo em um cenário real
Uma aplicação de e-commerce:
- Serviço de autenticação de usuário:
- Responsável por gerenciar o login e autenticação dos usuários.
- Serviço de catálogo de produtos:
- Gerencia a listagem de produtos disponíveis para compra, incluindo informações sobre preços, estoques e descrições.
- Serviço de gerenciamento de pedidos:
- Responsável por gerenciar o processamento de pedidos, incluindo pagamentos, envios e atualizações do estoque.
3. Arquitetura Pipe-Filter
Um modelo que divide a aplicação em pequenos componentes conectados entre si, como tubos e filtros. Cada componente é responsável por realizar uma tarefa específica, como transformar ou filtrar dados. Os dados são passados de um componente para o outro em uma sequência, como se estivessem passando de um tubo para o outro.
Vantagens
- Permite que os componentes sejam adicionados ou removidos facilmente, permitindo que a aplicação cresça de acordo com as necessidades de processamento de dados.
- Cada componente é projetado para ser reutilizável, o que significa que ele pode ser facilmente reaproveitado em outras aplicações.
- A separação clara dos componentes torna a aplicação mais fácil de manter e modificar.
Desvantagens
- Pode se tornar complexa se aplicada a aplicações muito grandes e de alta complexidade.
- O processamento em paralelo dos componentes pode resultar em latência, o que pode afetar a performance da aplicação.
Exemplo em um cenário real
Um editor de texto:
Os dados de entrada (texto bruto) são processados através de uma série de filtros, cada um responsável por realizar uma tarefa específica, sendo elas:
- Formatação do texto
- Verificação ortográfica
- Contagem de palavras
Cada filtro recebe o resultado do filtro anterior e produz uma saída para o próximo filtro até a saída final.
Finalizando...
Este foram três padrões comuns na arquitetura de software, trarei outros num futuro próximo.
Espero que isso ajude você de alguma maneira! 😄
Happy Coding!
Links úteis:
MVC
microservices
pipes-and-filters
Top comments (0)