Arquitetura Limpa
Quando surgiu arquitetura de software?
Apesar de se tornar popular nos anos 90, como conceito teve seu inicio na década de 60 com Edsger Dijkstra, um cientista da computação holandês, que ganhou o prêmio Turing em 1972 e posteriormente o prêmio Dijkstra em 2002, nessa época cientistas já discutiam arquitetura de software, dando ênfase a importância de estruturar um sistema antes de começar seu desenvolvimento.
O que é arquitetura de Software?
A estrutura de um software, com foco em como os componentes de um sistema interagem entre si, possibilitando então que qualquer componente tecnológico possa ser usado para integrar uma solução arquitetural, mostrando-se essencial para a otimização do trabalho de desenvolvedores e designers, garantindo os padrões básicos necessários para um funcionamento de forma assertiva, diminuindo assim os riscos associados ao sistema.
Len Bass 2003: é a estrutura (ou estruturas) do sistema, a qual é composta de elementos de software, das propriedades externamente visíveis desses elementos, e dos relacionamentos entre eles, é a abstração do sistema.
ISO/IEEE 1471-2000 - Arquitetura é a organização fundamental de um sistema incorporada em seus componentes, seus relacionamentos com o ambiente, e os princípios que conduzem seu design e evolução.
No final das contas é uma forma de conseguir compreender os atributos e limitações de um negocio/empresa, e tendo isso como base, trazer o software pelo menor valor possível e no menor tempo possível, além de torna-lo sustentável, estando pronto para comportar qualquer mudança da melhor forma possível, para que a solução possa continuar sendo evoluída.
Atualmente, com a diversidade de princípios e padrões que são utilizados nos sistemas, não vemos uma restrição em relação ao uso de um único estilo ou arquitetura, pelo contrario, são uma combinação de padrões que, juntos, formam o sistema completo.
A arquitetura de software envolve:
- Controle;
- Protocolos de comunicação, sincronização e acesso de dados;
- Decidir as estruturas que irão formar o sistema, etc...
Clean Architecture
Robert Cecil Martin
Robert Cecil, popularmente conhecido como "Uncle Bob", nasceu em 1952 na Califórnia, e atua como software professional desde 1970. Escreveu livros sobre UML, OOP, C++, além de publicar dezenas de artigos.
Como surgiu?
Micah Martin, desenvolvedor de software e filho de Uncle Bob, estava mostrando a ele a estrutura de diretórios de um projeto em que estava atuando. Após analisar a estrutura, ele conseguiu determinar que a tecnologia utilizada no projeto era Ruby on Rails. Posteriormente, em uma apresentação que estava fazendo, ele mostrou a arquitetura de uma igreja que era em formato de cruz, a propria arquitetura gritava a intenção do sistema. E isso deixou o Robert muito incomodado, dando início a criação da Arquitetura Limpa ou Clean Architecture, promovida em seu livro "Clean Architecture: A Craftsman’s Guide to Software Structure".
Ideias e objetivos
Robert propôs o design da arquitetura limpa para servir como um modelo para sistemas modulares. Tendo como objetivo criar uma arquitetura de camadas simplificada, fornecendo aos desenvolvedores uma metodologia que visa facilitar o desenvolvimento, manutenção, extensão e atualização do código, assim como diminuir as dependências, permitindo então que o sistema seja ágil a mudanças, conforme as necessidades que surgem durante o amadurecimento do software.
Como Funciona?
Se tratando de uma arquitetura Domain-Centric, isto é, entende que a razão da existência de
um software é o domínio, colocando ele no centro. A arquitetura limpa visa isolar o core da
aplicação do mundo externo a partir do uso de camadas, seguindo o principio SoC, de forma
que cada um dos seus componentes possui suas próprias responsabilidades e cada uma delas
tem conhecimento apenas de camadas de dentro.
Mark Seeman "de forma que cada um dos seus componentes possui suas próprias responsabilidades
e cada uma delas tem conhecimento apenas de camadas de dentro."
Na arquitetura limpa o fluxo de dependência entre as camadas, centraliza a camada de domínio,
tornando possível projetar aplicativos com menor acoplamento e independentes de detalhes
técnicos de implementação, como bancos de dados e estruturas.
Camadas
Entidades
Camada que encapsula as entidades (classes comuns a vários sistemas da empresa) e regras de negócio, contendo as regras que tem a menor possibilidade de mudança devido a alterações externas, como algo na interface.
Use Case
Esta camada fica com as regras de negocio mais especificas de um sistema, sendo responsável
pela forma como o sistema é utilizado por uma pessoa ou client.
Adaptadores
Esta camada é responsável pela conversão dos dados vindos das camadas mais internas, mediando
a interação entre a camada mais externa da arquitetura e as camadas centrais, contendo por
exemplo gateways e DTOs.
Frameworks
Aqui ficam os elementos externos, como por exemplo: Frameworks, Banco de dados, e quaisquer
sistemas externos.
Vantagens
Testes
Facilidade para testar o código, a clean architecture preza que o núcleo não dependa de nada, o que torna possível testa-lo sem depender de qualquer outro elemento externo (interface, banco, servidor...).
Flexibilidade
Alterações em camadas externas não afetam o core da aplicação, pois ele é independente de qualquer agente externo, de forma que suas regras de negócio não conhecem o mundo exterior.
Desvantagens
Curva de Aprendizagem
Possui uma curva de aprendizado íngreme, principalmente para devs que vem de padrões mais simples(MVP, MVVM...), exigindo tempo e dedicação para entender seus conceitos.
Muitas Classes
Essa arquitetura usa um grande número de classes adicionais, um esforço necessário para tornar nosso código desacoplado e generalista, o que torna a aplicação apta para receber substituições sem impactar o nosso domínio, fazendo com que este modelo não seja o ideal para projetos de baixa complexidade.
Links para se aprofundar
Vídeos
Clean Architecture (Arquitetura Limpa) // Dicionário do Programador
45 - Clean Architecture
O que é Clean Architecture?
Clean Architecture
REST, GraphQL, Clean Architecture e TypeScript com Rodrigo Manguinho // Live #69
Artigos
The Clean Architecture
Descomplicando a Clean Architecture
Clean Architecture: o que é, vantagens e como utilizar em aplicações na prática
Considerações finais
Minha intenção era sintetizar informação sobre a tão falada Clean Architecture de modo a auxiliar quem esteja no processo de aprendizado, espero que eu tenha conseguido ajudar alguém :)
Feedbacks
Estou aberto a feedbacks, correções de informações erroneas e a bater um papo:
Meu Linkedin
Um abraço!