1
resposta

[Dúvida]Organização dos pacotes/camadas na clean architecture

Estou com dificuldades de entender a organização dos pacotes/camadas na clean architecture, e se isolando a as entidades/nucleo do framework como por exemplo não utilizar @Entity etc...como fica esse mapeamento para as tabelas? na hora de persistir tenho que tem uma classe que represente isso no banco? e quando posso utilizar o objeto com a classe das Entidades/nucleo ? e os Services são mais granulares e chamamos de usecases?

Controllers Services Repositories DTOS Entidades Como ficaria a organização desse projeto nessa estrutura de clean architecture que vem sendo ensinada no curso?

Seria dessa forma:

Domínio:

Entidades Aplicação:

Controllers Services ou caso de uso? Infraestrutura:

Repositories DTO's está correto?

1 resposta

Olá, Alexandre. Entendo que a arquitetura limpa pode parecer um pouco complexa no início, mas vou tentar esclarecer suas dúvidas da melhor maneira possível.

A Clean Architecture, ou Arquitetura Limpa, é uma estrutura que visa separar as responsabilidades do software em camadas distintas, tornando o sistema mais organizado, flexível e independente de frameworks e UI.

A sua organização proposta está bem próxima do que geralmente é adotado. No entanto, vamos detalhar um pouco mais:

  1. Domínio (ou Núcleo): Aqui ficam as Entidades, que são os objetos que contêm as regras de negócio mais importantes. Elas são independentes de qualquer detalhe de infraestrutura e não devem ser afetadas por mudanças externas, como banco de dados ou interface do usuário.

  2. Aplicação: Esta camada contém a lógica de negócio da aplicação e coordena as entidades do domínio. Aqui ficariam os Use Cases (ou Casos de Uso), que você mencionou como "Services". Eles contêm regras de negócio específicas da aplicação e orquestram como os dados são movidos entre as camadas. Os Controllers, que lidam com a entrada de dados do usuário, também podem ser colocados aqui, embora em algumas arquiteturas eles possam ser colocados na camada de Interface do Usuário.

  3. Infraestrutura: Aqui ficam os Repositories, que são responsáveis por persistir as entidades em um banco de dados, e os DTOs (Data Transfer Objects), que são objetos simples usados para transferir dados entre as camadas.

Em relação à sua dúvida sobre o mapeamento das entidades sem utilizar anotações como @Entity, uma abordagem comum é criar classes de mapeamento ou converter que transformam as entidades do domínio em objetos que podem ser persistidos no banco de dados (e vice-versa). Essas classes ficariam na camada de Infraestrutura.

Espero ter ajudado e bons estudos!