Usando Herança em java para aprimorar a confiabilidade em APIs Spring Boot
- #Spring
- #Java
Esse é um artigo rápido, apenas para exemplificar como podemos usar herança na
prática em um projeto real. Anotações foram omitidas.
Numa API em Spring Boot costumamos criar models para modelar as
tabelas do banco de dados, como dessa forma:
public class User {
private int id;
private String nome;
private String cpf;
}
Muito bem, mas e se agora querermos cadastrar pessoas físicas e jurídicas? No problem:
public class UserPessoaJuridica {
private int id;
private String razaoSocial;
private String cnpj;
}
Well done! Mas agora imagine que eu queria guardar o endereço e telefone de todos os usuários, pessoa física e jurídica. A primeira ideia seria:
public class User {
private int id;
private String nome;
private String cpf;
private String endereco;
private String telefone;
}
public class UserPessoaJuridica{
private int id;
private String razaoSocial;
private String cnpj;
private String endereco;
private String telefone;
}
Mas em um projeto real existem dezenas ou até mesmo centenas de dados e métodos comuns à várias classes, o que torna a lógica e manutenção complicadas, aumentando as chances de inconsistências e bugs. Aí a herança pode nos ajudar! Vamos reescrever as classes acima usando herança:
/*
Classe que contém as variáveis e métodos comuns às todos os usuários
*/
public class User {
private int id;
private String endereço;
private String telefone;
private LocalDateTime dataCriacao;
// construtores, getters e setters
}
/*
Classe que recebe os atributos e métodos da classe User e
implementa atributos de pessoa física
*/
public class UserPessoaFísica extends User{
private String cpf;
private String idade;
}
/*
Classe que recebe os atributos e métodos da classe User e
implementa atributos de pessoa jurídica
*/
public class UserPessoaJuridica extends User{
private String cnpj;
private String private capitalInicial;
}
Se em determinado momento for necessário implementar um método comum aos dois tipos de usuário:
public class User {
private int id;
private String endereço;
private String telefone;
private LocalDateTime dataCriacao;
private String email; // comum a todos os users
// construtores, getters e setters
}
Assim, a manutenção do código fica mais simples e dessa forma sabemos que
um requisito será implementado em todas as classes que precisam fazer essa
implementação.
Esse código foi desenvolvido em uma API de assistência médica. Nos próximos artigos
publicarei como implementar uma API usando Spring Boot do back ao front para solucionar um problema real.
Dica de estudo: Pesquise e comente aqui como é feita a implementação dos atributos de uma super classe no construtor!