Convention over Configuration em Java com JPA
Vamos aplicar o COC para acelerar a escrita de cód
Você sabe o que é Convenção sobre Configuração (Convention over Configuration ou simplesmente CoC) no desenvolvimento de software?
É um princípio adotado por diversos frameworks e especificações para diferentes linguagens, incluindo Java com Spring, Quarkus e JPA/Hibernate (só para citar alguns). Desenvolvedores de frameworks geralmente têm uma maneira bastante opinativa de fazer as coisas, como convenções de nomenclatura, estrutura e padrões de projeto.
Seguindo essas convenções/padrões, você alinha seu projeto e sua equipe com as melhores práticas que foram cuidadosamente escolhidas pelos criadores dos frameworks após muita reflexão (às vezes, com anos de experiência). Dessa forma, você pode se concentrar na implementação do seu core business.
Aplicando CoC, você acelera a escrita de código, já que escreve menos código e configurações, apenas aceitando os padrões. E frameworks modernos sempre permitem que você personalize as coisas quando realmente precisa.
CoC também é uma maneira mais segura de garantir que todos os membros da equipe sigam as mesmas convenções sem nenhum esforço. Se você não fizer nada adicional, estará seguindo esses padrões. Portanto, a maneira correta de criar o software também é a mais fácil.
Vamos falar sobre como as convenções em JPA/Hibernate são ótimas e ajudam você a escrever código mais rápido. Considere a classe Java com anotações JPA mostrada abaixo.
@Entity
public class Order {
private Long id;
private ZonedDateTime dateTime;
@ManyToOne
private Customer customer;
@OneToMany
private List<OrderItem> itens;
}
Se você trabalha com JPA, está familiarizado com anotações como @Entity
, @OneToMany
e @ManyToOne
.
Como pode ver, essas são as únicas anotações que incluí (embora as anotações do Hibernate Validation possam ser usadas adicionalmente).
Seguindo as convenções JPA, o nome da entidade é usado como o nome da tabela e o nome dos campos é usado como os nomes das colunas no banco de dados.
Mas o que tenho visto com frequência são pessoas usando anotações @Table
e @Column
para redefinir os nomes de tabelas e colunas sem nenhum motivo específico.
Às vezes, é apenas para adicionar um prefixo tbl_
aos nomes das tabelas ou para forçá-los a usar letras minúsculas.
O prefixo de tabela é uma abordagem usada em aplicativos mult-tenant, mas adicioná-lo sem um motivo explícito é apenas boilerplate e até viola o Princípio "Don't Repeat Yourself" (DRY). É propenso a erros e te torna mais lento ao escrever código.
Não acho que dizer que você quer os nomes das tabelas em minúsculas seja um bom motivo também. Quem se importa? E se você realmente se importa, bancos de dados como o MySQL permitem que você configure isso.
Acho que as convenções da JPA são bastante razoáveis, incluindo até mesmo o underline para nomes compostos, como date_time
.
Seguir tais convenções é vantajoso para todos. É mais fácil para novos membros da equipe, é mais rápido escrever código e menos sujeito a erros.
E você tem uma coisa a menos com que se preocupar durante as revisões de código.
Então, bora seguir as convenções.
Related articles
Você não precisa mais de DTOs em Java (pelo menos não os que você cria manualmente)
Pelo menos não os que você cria manualmente
Java J2EE – Primeiro Passo
Descrição do artigo publicado no aspneti.com, cada artigo com seu resumo