Arquitetura Limpa: O Melhor Da Arquitetura Em Camadas
Arquitetura que propõe uma divisão para facilitar na hora de mudar o seu software
1. Introdução
O sucesso no desenvolvimento de um software requer uma arquitetura tanto como um projeto para construção de um edifício, por exemplo. A arquitetura de software propõe uma melhor organização, qualidade no desempenho, confiabilidade, portabilidade do sistema . Impactando diretamente nos requisitos não funcionais.
2. A arquitetura em camadas
A arquitetura em camadas surgiu com a ideia de separar a apresentação da lógica de negócios do software. Esta forma de organizar o desenvolvimento do software consiste em dividir as a aplicação em camadas para separar responsabilidades e tornar o software mais fácil de manter e ser reutilizado.
Para a arquitetura de um software de porte pequeno geralmente são listadas três camadas:
UI (User Interface) - Camada de interface do usuário faz a interação e apresentação de dados ao usuário;
BLL (Bussiness Logic Layer) - Camada de Negócios armazena a lógica, tratando as regras de negócios do software, também é chamada de camada lógica de negócios ou camada de domínio.
DAL (Data Acess Layer) - Camada de acesso a dados: responsável em acessar e persistir os dados da aplicação;
O funcionamento desta arquitetura prevê o seguinte funcionamento, camada de interface deverá conter as páginas para interagir com o usuário obtendo informações da camada de negócios que por sua vez faz o tratamento das regras de negócio da aplicação e obtém informações dos dados da camada de acesso a dados. A camada de interface não pode conhecer nada da camada de acesso a dados.
A proposta desta arquitetura é a criar a possibilidade de alterar ou atualizar uma camada sem ter que interferir com a outra camada, baseando-se em um nível de abstração entre as camadas.
Observando o diagrama à esquerda, percebe-se que a ordem das três camadas citadas impõe uma dependência da camada superior a inferior a ela. O que pode gerar um possível problema nesta forma de arquitetura tradicional. Arquitetado nesta ordem os desenvolvedores do software podem ter dificuldades quando for necessário fazer alguma alteração no Banco de dados do sistema, além de poder dificultar o teste do código da lógica de negócio, por depender da camada de acesso aos dados.
Atualmente existem muitas arquiteturas que se baseiam na arquitetura em camadas, algumas aumentam o número de camadas, fazem substituição ou invertem a ordem de determinadas camadas na intenção de trazer mais benefícios para que os requisitos não funcionais sejam atendidos. Em meio a arquitetura em camadas e a necessidade de mudanças do software surgiu a The Clean Architecture, no português a Arquitetura Limpa.
3. The Clean Architecture
A arquitetura limpa criada por Uncle Bob (Robert C. Martin), representada por um diagrama com camadas circulares concêntricas, baseia-se no isolamento dessas camadas, para que a substituição dos componentes na camada sejam fáceis e não afetem todo o sistema. A troca de um componente por outro não deve fazer o software funcionar diferente, ou até mesmo parar de funcionar. As responsabilidades das camadas são definidas da seguinte forma:
3.1 Framework e Drivers
É a camada mais externa, protege o sistema das mudanças de detalhes, ou seja as alterações nesta camada não implicam na funcionalidade do software, por isso é a camada dos detalhes e que se comunica com o próximo círculo interno.
3.2 Adaptadores de interfaces (Interface Adapters)
Converte os dados informados pelos usuários em uma estrutura que interage com o sistema, é a camada onde reside os presenters, controles, gateways e repositories.
3.3 Regras de negócios de aplicações (Application Business Rules)
É responsável pelo processamento das informações, é onde ficam os casos de uso, onde acontece a validação das regras de negócios e feedback do que está acontecendo.
3.4 Regras de negócios corporativos (Enterprise Business Rules)
Camada das entities onde ficam os códigos de regra de negócio à nível de negócio. Esses códigos devem estar prontos para o reaproveitamento.
Na proposta da Arquitetura limpa todas as dependências devem apontar para dentro, os círculos externos são mecanismos e os internos políticas. Em outras palavras o código fonte não deve ter conhecimento das camadas externas a sua camada, não devem ter nenhum tipo de dependência a estas por isso o nome de Regra da Dependência.
4. Conclusão
Todo a divisão e conceito desta arquitetura proporciona uma melhor organização da estrutura do software, tonando-o mais fácil para possíveis mudanças, por conta do isolamento das camadas. A qualquer momento os componentes de interfaces poderão ser modificados e não afeta em nada o sentido e funcionamento do software.