1
resposta

Método setSituacaoOrcamento esta público, deveria ?

No projeto AULA 4 - STATE as classes que são a representação do estado de cada orçamento utilizam do método setSituacaoOrcamento da classe Orcamento para fazerem a transição de estado. Para isso ser possível o método setSituacaoOrcamento está público, deveria? Afinal isso permite que qualquer pessoa altere o STATUS do orçamento ignorando as regras de transição.. É possível deixa-lo de alguma maneira privado ?

1 resposta

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!