Estratégia de validação para a unidade de padrão de trabalho
-
25-09-2019 - |
Pergunta
Quando eu uso o unidade de padrão de trabalho (com JPA), recebo uma entidade de um repositório, modifico -a e salvo as modificações na e da unidade de trabalho implicitamente no banco de dados.
Agora me pergunto como realizar validação com a unidade de padrão de trabalho. Se eu aplicar alterações (da entrada do usuário) a um objeto de domínio e validar depois disso, os valores desse objeto serão alterados mesmo se a validação falhar. Qual é a maneira de evitar escrever um objeto com estado ilegal no banco de dados? Reverte a unidade de trabalho?
Um dos objetivos do OOP é que os objetos vigiam seu próprio estado, para que eles nunca aceitem valores ilegais. Para essa abordagem, tive que lançar exceções e é o oposto da abordagem de validação do feijão (e validação da primavera) de cima. Mas talvez seja mais simples e melhor.
Que estratégia de validação você usaria (no design orientado ao domínio)?
Solução
Qual é a maneira de evitar escrever um objeto com estado ilegal no banco de dados? Reverte a unidade de trabalho?
Se você usar a API de validação do feijão, ela lançará uma exceção e as mudanças não serão persistidas (se ativado, a validação deve ocorrer na fase final do PrePersist
, PreUpdate
, e PreRemove
eventos do ciclo de vida).
Com o JPA 2.0, basta colocar uma implementação de validação de feijão no caminho da classe.
Com JPA 1.0, consulte esta resposta anterior.