Sabemos que o objetivo principal da Clean Architecture é criar sistemas que sejam independentes de frameworks, testáveis e fáceis de entender, manter e evoluir ao longo do tempo.
A ideia central por trás da Clean Architecture é a separação de preocupações e a dependência de direção. O sistema é dividido em camadas concêntricas, onde cada camada tem uma responsabilidade específica e depende apenas das camadas internas. As camadas são organizadas de forma hierárquica, com as camadas mais internas contendo a lógica de negócios e as camadas mais externas tratando de detalhes de implementação, como interfaces com o usuário e bancos de dados..
Mas na prática como essa divisão ocorre na estrutura de diretórios do nosso sistema?
Suponha que estamos desenvolvendo um aplicativo de lista de tarefas com as seguintes funcionalidades:
- Adicionar uma nova tarefa.
- Exibir todas as tarefas.
- Marcar uma tarefa como concluída.
- Excluir uma tarefa.
Aqui está uma possível estrutura de arquitetura limpa:
Agora, vamos explicar a organização proposta:
domain: Este pacote contém a camada de domínio da aplicação. Ele inclui o modelo de domínio (Task) e os contratos de repositório (TaskRepository). Esta camada representa as regras de negócio do sistema e é independente de qualquer detalhe de implementação.
usecase: Aqui estão os casos de uso da aplicação, que representam as interações que o usuário pode ter com o sistema. Cada caso de uso é uma classe Java que contém a lógica necessária para realizar uma operação específica, como adicionar uma nova tarefa, recuperar todas as tarefas existentes ou marcar uma tarefa como concluída.
adapter: Este pacote contém os adaptadores para integrar o sistema com elementos externos. O subpacote delivery contém apresentadores que formatam os dados para serem entregues ao usuário. O subpacote gateway contém adaptadores que lidam com operações de banco de dados. O subpacote controller contém controladores que lidam com as solicitações HTTP.
TaskManagerApplication.java: Esta é a classe principal do Spring Boot, que inicia a aplicação e configura o contexto do Spring. Aqui é onde você pode definir as configurações do Spring Boot, como componentes, serviços, configurações de banco de dados, etc.
Essa estrutura segue os princípios da Clean Architecture, com a separação clara de responsabilidades e a direção das dependências, garantindo uma aplicação que seja independente de frameworks e fácil de entender, testar e manter.
Top comments (0)