Fala Vitor, tudo bem?
De fato, tornar o método setSituacaoOrcamento
como public
pode ser um problema, pois permite que qualquer classe possa alterar o status do orçamento sem passar pelas regras de transição que deveriam ser aplicadas. Uma solução seria tornar o método setSituacaoOrcamento
privado e criar um método público que seja responsável por fazer a transição de estados de acordo com as regras de negócio. Esse novo método public
pode receber como parâmetro o estado para o qual o orçamento deve ser transicionado e, internamente, chamar o método setSituacaoOrcamento para realizar a mudança de estado:
public class Orcamento {
private SituacaoOrcamento situacao;
private void setSituacaoOrcamento(SituacaoOrcamento situacao) {
this.situacao = situacao;
}
public void transitaPara(SituacaoOrcamento situacao) {
// Aplica as regras de negócio para verificar se a transição é permitida
if (this.situacao.podeTransitarPara(situacao)) {
setSituacaoOrcamento(situacao);
} else {
throw new RuntimeException("Transição não permitida");
}
}
}
Espero ter ajudado e bons estudos!