1
resposta

Enum ao invés de classes

Olá.

Vocês veem diferença aonde ao invés de usar uma classe para ter tais comportamentos, eu ter apenas um enum, e dentro do enum colocar todas as regras em formato de atributo, e desta forma eu criar um método no enum para realizar o cálculo de todos os impostos recebendo um array de enums ?

Exemplo algo do tipo

public enum TiposDeImpostos {

    ICMS(new BigDecimal("0.1")),
    ISS(new BigDecimal("0.06"));

    private BigDecimal porcentagemDeDesconto;

    TiposDeImpostos(BigDecimal porcentagemDeDesconto) {
        this.porcentagemDeDesconto = porcentagemDeDesconto;
    }

    public BigDecimal realizarCalculo(Orcamento orcamento, ArrayList<TiposDeImpostos> tiposDeImpostos) {
        var valor = BigDecimal.ZERO;

        tiposDeImpostos.forEach(imposto ->
                valor.add(orcamento.getValor().multiply(imposto.porcentagemDeDesconto))
        );
        return valor;
    }
}

Vejo que desta maneira continua tendo o mesmo efeito(pouco lugar para refatorar em mudanças)

1 resposta

Olá Bruno, tudo bem?

Sua pergunta é muito interessante e pode gerar uma boa discussão. Utilizar enums ao invés de classes pode ser uma boa opção em alguns casos, mas é importante lembrar que enums são tipos de dados que representam um conjunto fixo de valores constantes. Eles não foram projetados para serem usados como classes comuns.

No seu exemplo, você está utilizando o enum para representar diferentes tipos de impostos e seus valores. Isso pode ser uma boa opção, já que você tem um conjunto fixo de impostos e seus valores. No entanto, é importante lembrar que enums não possuem a mesma flexibilidade que classes. Por exemplo, você não pode adicionar novos métodos ou variáveis a um enum em tempo de execução.

Outro ponto importante é que, ao utilizar um enum como você propôs, você está misturando a lógica de negócio com a definição do tipo de dado. Isso pode tornar o código mais difícil de entender e manter.

Em resumo, utilizar enums ao invés de classes pode ser uma boa opção em alguns casos, mas é importante avaliar as vantagens e desvantagens antes de tomar essa decisão. No seu exemplo, parece que o uso de um enum pode ser uma boa opção, mas é importante lembrar que essa abordagem pode não ser adequada em outros casos.

Espero ter ajudado e bons estudos!