Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Implementação da Infra com acesso ao Banco

No caso de usar o JPA, onde a gente anota direto nas entidades, como ficaria isso no Clean Architecture?

Devemos criar classes auxiliares anotadas e encapsular com as entidades da aplicação?

Veja que não gostaria de retroceder e usar xml.

2 respostas

Permita-me citar o livro The Clean Architecture. Página 198: "Seus objetos Entity devem ser objetos simples que não têm dependências em estruturas ou bancos de dados ou outras complicações." A página 215 continua esclarecendo "Onde esses sistemas ORM devem residir? Na camada de banco de dados, é claro." Ou seja, "entidades" JPA e "entidades" Clean Architecture são distintas. Pode anotar suas entidades JPA normalmente

solução

Oi Wesley,

Basicamente você tem 3 opções:

  1. Adicionar as anotações da JPA nas classes entity da camada de domínio;
  2. Criar classes separadas na camada de infra e anotar essas classes; e
  3. Mapear as entidades da camada de domínio via XML.

A opção 1 é a mais "simples/fácil", porém menos recomendada, pois você fere a principal regra do clean architecture, que é separar o código de dominio de detalhes de infraestrutura.

Na opção 2 para cada entidade da camada de domínio voce cria uma classe equivalente na camada de infra, sendo que essas classes é que vão ser anotadas com a JPA.

Aqui a vantagem é não poluir a camada de domínio com códigos de infraestrutura, porém a desvantagem é ter código duplicado, uma vez que tais classes serão copias das classes entidade de domínio.

Por fim, a 3º opção evitaria essa duplicação, uma vez que o mapeamento seria feito via XML na camada de infra.

Eu particulamente gosto bastante da 3ª opção, pois é a que gera menos atrito e mantém o código mais simples e desacoplado.

Muitas pessoas não vão gostar dessa abordagem, por conta de ter que mapear as entidades JPA via XML, mas não vejo problemas nisso. No início do Hibernate era assim que funcionava e resolvia muito bem o problema :)

Bons estudos!