Muitos desenvolvedores normalmente acabam misturando os elementos entre arquitetura e design. Vou tentar exemplificar as diferenças entre design de software e arquitetura de software e tentarei mostrar a importância para um desenvolvedor conhecer um pouco sobre arquitetura de software e muito design de software.
Definição de arquitetura de software
Arquitetura de software é o processo de conversão de características de software como flexibilidade, escalabilidade, viabilidade, reutilização e segurança em uma solução estruturada que atenda às expectativas técnicas e de negócios. Segue alguns exemplos de padrão de arquitetura utilizados atualmente no mercado.
Arquitetura sem servidor
Arquitetura sem servidor é normalmente dividida em duas categorias principais. O primeiro é "Back-end como serviço (BaaS)" e o segundo é "Funções como serviço (FaaS)". A arquitetura sem servidor ajudará você a economizar muito tempo cuidando e corrigindo erros de tarefas regulares de implantação e servidores.
Arquitetura orientada a eventos
A idéia principal é desacoplar as partes do sistema e cada parte será acionada quando um evento interessante de outra parte for acionado. A característica mais importante neste padrão é gerador do evento não conheço quais são os ouvintes que estão ouvindo seu evento, a idéia principal é dissociar as partes do sistema.
Arquitetura de microsserviços
A arquitetura de microsserviços se tornou a arquitetura mais popular nos últimos anos. Depende do desenvolvimento de serviços modulares pequenos e independentes, nos quais cada serviço resolve um problema específico ou executa uma tarefa exclusiva e esses módulos se comunicam por meio de uma API bem definida para atender à meta de negócios.
Definição de design de software
O design do software é responsável pelo design do nível de código, como o que cada módulo está fazendo, o escopo das classes e os objetivos das funções, etc. Para um desenvolvedor é importante saber qual é o princípio do SOLID (mais informações em https://www.marcelogoberto.com.br/2020/04/principios-do-solid-que-todo.html) e como um padrão de design deve resolver problemas regulares. Aqui também temos alguns exemplos de padrões de design.
Factory Pattern
É o padrão de design mais usado no mundo OOP, permite às classes delegar para subclasses decidirem, isso é feito através da criação de objetos que chamam o método fábrica especificado numa interface e implementado por um classe filha ou implementado numa classe abstrata e opcionalmente sobrescrito por classes derivadas
Design Patterns
O padrão é bem simples, vamos pensar o que acontece na vida real... Utilizamos nas nossas construções civis um padrão de tomadas e plugues, um belo dia saiu o padrão brasileiro de tomadas e plugues, quando você compra um aparelho que atende a essa norma logo pensa, vou ter que comprar um adaptador para adaptar esse plugue a tomada que está em casa, pois são padrões (modelos) diferentes.
Conclusão
Uma simples analogia exemplifica muito bem a principal diferença entre arquitetura e design de software, sendo a solução um corpo humano, a arquitetura é responsável pela composição corpórea (esqueleto, disposição do órgãos, vasos sanguíneos) e o design de software será responsável por garantir funcionamento de cada órgão. Em linguagem técnica, arquitetura é alto nível e design é nível de código.
Os arquitetos de software devem ter um bom conhecimento sobre as soluções existentes que os ajudam a tomar decisões corretas na fase de planejamento e um desenvolvedor de software deve saber mais sobre design de software e bastante sobre arquitetura de software para facilitar a comunicação interna dentro da equipe.
Marcelo Goberto de Azevedo
Arquiteto na GFT Brasil