public class Funcionario {
private String nome;
private String cpf;
private Cargo cargo;
private BigDecimal salario;
private LocalDate dataUltimoReajuste;
private ReajusteService reajusteService;
public Funcionario(String nome, String cpf, Cargo cargo, BigDecimal salario) {
this.nome = nome;
this.cpf = cpf;
this.cargo = cargo;
this.salario = salario;
this.reajusteService = new ReajusteService(this);
}
public void reajustarSalario(BigDecimal aumento) {
this.salario = reajusteService.reajustarSalarioDoFuncionario(aumento);
this.dataUltimoReajuste = LocalDate.now();
}
///////
public class ReajusteService {
private Funcionario funcionario;
public ReajusteService(Funcionario funcionario){
this.funcionario = funcionario;
}
public BigDecimal reajustarSalarioDoFuncionario(BigDecimal aumento){
BigDecimal percentualReajuste = aumento.divide(funcionario.getSalario(), RoundingMode.HALF_UP);
if (percentualReajuste.compareTo(new BigDecimal("0.4")) > 0) {
throw new ValidacaoException("Reajuste nao pode ser superior a 40% do salario!");
}
return funcionario.getSalario().add(aumento);
}
}
Sobre o problema de encapsulamento do método de reajuste, eu pensei nessa solução fazendo uma composição, gostaria de saber se é uma solução viável