Síntese sobre Aquitetura de Software e Design de Software
Hey folks,
Neste artigo irei falar a respeito do que venho estudando sobre Arquitetura de Software e Design de Software. Desde que comecei a estudar programação muito ouvi falar a respeito, mas nada era muito concreto ou que fornecesse um contexto no qual eu conseguira enxergar de fato do que se tratava. Este artigo é para aqueles que assim como eu, ou que estão começando na área ou não e que batam nesses termos mas não saibam seu real proprósito.
Vamos falar de forma descontraída esses conceitos e mostrar como estes podem transformar e mudar sua visão de trabalho para algo mais sólido e de forma que tenha sentido. Tudo em busca de nos tornarmos melhores devs.
Começando por Arquitetura de Software
É feita de decisões difíceis de mudar como a escolha de uma linguagem, biblioteca, framework, banco de dados para persistência das
informações e etc. Define e estabelece padrões, estruturas e regras que orientam o desenvolvimento e a integração dos componentes.
Alguns aspectos da Arquitetura de Software:
Qualidade
Algumas qualidades arquiteturais importantes incluem:
- Escalável → Capaz de expandir as mudanças e novas regras do sistema;
- Flexível → Fácil de alterar e de se adaptar;
- Segura → Protege informações e recursos do sistema;
- Eficiente → Otimiza uso de recursos e performance;
Exemplos de ferramentas para qualidade:
- Análise Estática do Código → ESLint, Pylint, Checkstyle …
- Teste e Cobertura de Código → Mocha, JUnit, pytest…
- CI/ CD → Jenkins, GitLab CI/CD, Circle CI…
Componentes e Conectores
A arquitetura é composta por componentes, que são as partes individuais e independentes do sistema, e conectores, que são os mecanismos de interação e comunicação entre esses componentes.
Exemplos de ferramentas para qualidade:
Não existem ferramentas específicas para conectar componentes, mas temos alguns exemplo que cobrem este ponto.
- Frameworks e Bibliotecas → Angular, React, Vue…
- Sistemas de Mensageria e Comunicação entre componentes → RabbitMQ, gRPC, RESTful APIs …
- Componentes de UI → MaterialUI, Bootstrap, Tailwind, POUI
Padrões e Estilos Arquiteturais
Há diferentes padrões e estilos arquiteturais que podem ser aplicados ao desenvolvimento de software, dependendo das necessidades do projeto. Alguns exemplos populares são a arquitetura em camadas, a arquitetura orientada a serviços (SOA) e a arquitetura de microserviços. Cada estilo possui seus próprios benefícios e desafios e deve ser escolhido com base nos objetivos e requisitos específicos do projeto.
O Domínio da Arquitetura é crucial na criação de sistemas robustos e performáticos, que atendam as necessidades e sejam escaláveis. Entender e adotar boas práticas no desenvolvimento irá garantir com toda certeza qualidade e confiabilidade do seu software.
Design de Software
Design de software é o processo de planejamento e organização da estrutura do seu projeto e como interagem entre si. Em suma é o padrão de responsabilidade difinindo o que cada coisa deve fazer.
Um bom design deve ser:
Coeso → Cada componente/ Classe deve ter uma única responsabilidade;
Desacoplado → Componentes devem ter baixa dependência entre si, facilitando a manutenção e escalabilidade;
Príncipios SOLID: Adotar tais paradigmas promovem a criação de um software de qualidade
Em resumo o código é uma mera sequência de instruções de seleção e iteração, design é relacionamento e responsabilidade. — Branas
E é isso pessoal, como eu disse se trata de uma síntese do meu entendimento sobre o assunto, o qual venho aprendendo de forma muito produtiva com o Rodrigo Branas em seu curso.
Fonte:
- Imagem 1: fonte: https://1.bp.blogspot.com/-NCSDoy3HX5c/XxNHvdwk8gI/AAAAAAABH9c/LeJS0PWZCxcfVJpDy7Na33nycU-IvKsywCLcBGAsYHQ/w640-h250/Arquitetura_vs_Design_Softw.jpg
- Curso Branas: Clean Code e Clean Architecture — Turma 11