Validar dentro do contrutor é correto ? dúvidas aqui ? Pessoal estou aprendendo

• Valide a quantidade comprada do item, se ela não for positiva deve ser configurada como 0 (zero);
• Valide o valor unitário do item, se ele não for positivo deve ser configurado como 0.00 (zero);
• O método valorFatura() calcula o valor total da fatura (multiplica a quantidade pelo preço);
• Escreva uma classe Principal que demonstre os comportamentos da classe Fatura.
package atividade1;

public class Fatura
{
private int numeroItem;
private String descricao;
private int quantidadeComprada;
private double valorUnitario;

public Fatura(int numeroItem, String descricao, int quantidadeComprada, double valorUnitario) {
    this.numeroItem = numeroItem;
    this.descricao = descricao;
    if (quantidadeComprada > 0) 
    {
        this.quantidadeComprada = quantidadeComprada;
    } else
    {
        this.quantidadeComprada = 0;
    }
    if (valorUnitario > 0.00) 
    {
        this.valorUnitario = valorUnitario;
    } else {
        this.valorUnitario= 0;
    }
}

public int getNumeroItem() 
{
    return numeroItem;
}

public String getDescricao()
{
    return descricao;
}

public int getQuantidadeComprada() 
{
    return quantidadeComprada;
}

public double getValorUnitario()
{
    return valorUnitario;
}

public double valorTotal() 
{
    return quantidadeComprada * valorUnitario;
}

}
package atividade1;

public class Principal
{

public static void main(String[] args)
{
    Fatura fatura1 = new Fatura(1, "Arroz", 3, 9.80);
    System.out.println("Numero Item: " + fatura1.getNumeroItem() + " Descricao: " + fatura1.getDescricao() + " Quantidade comprada: "
            + fatura1.getQuantidadeComprada() + " Valor Unitario: " + fatura1.getValorUnitario());
    System.out.println("Valor total da Fatura: " + fatura1.valorTotal());

    System.out.println("********************************************************************");
    Fatura fatura2 = new Fatura(1, "Feijao", 10, 0.00);
    System.out.println("Numero Item: " + fatura2.getNumeroItem() + " Descricao: " + fatura2.getDescricao() + " Quantidade comprada: "
            + fatura2.getQuantidadeComprada() + " Valor Unitario: " + fatura2.getValorUnitario());
    System.out.println("Valor total da Fatura: " + fatura2.valorTotal());

}

}
package atividade1;

public class Principal
{

public static void main(String[] args)
{
    Fatura fatura1 = new Fatura(1, "Arroz", 3, 9.80);
    System.out.println("Numero Item: " + fatura1.getNumeroItem() + " Descricao: " + fatura1.getDescricao() + " Quantidade comprada: "
            + fatura1.getQuantidadeComprada() + " Valor Unitario: " + fatura1.getValorUnitario());
    System.out.println("Valor total da Fatura: " + fatura1.valorTotal());

    System.out.println("********************************************************************");
    Fatura fatura2 = new Fatura(1, "Feijao", 10, 0.00);
    System.out.println("Numero Item: " + fatura2.getNumeroItem() + " Descricao: " + fatura2.getDescricao() + " Quantidade comprada: "
            + fatura2.getQuantidadeComprada() + " Valor Unitario: " + fatura2.getValorUnitario());
    System.out.println("Valor total da Fatura: " + fatura2.valorTotal());

}

}

É uma má pratica validar deste jeito, então seria melhor você fazer um método privado e chamar no construtor !! Mais isso depende muito da sua estrutura do projeto. Pois você também pode criar uma classe que válida a fatura vai depender muito de seu projeto.

1 curtida

Dizer que validar dentro do construtor não seja correto é um equívoco.
Mas suponha que existam vários construtores, então é melhor ter um metodo para validação.
Cada um tem sua lógica e pratica em programação, Eu não gosto de validar dentro do construtor, mesmo porque se for validar mais de uma vez, teria que ser uma nova instancia, isso consume recurso.Então ter uma classe instanciada e ficar chamando o metodo repetidas vezes para validar é bem mais rápido e econômico.

1 curtida

Não falei que dentro do construtor é uma má prática apenas disse que dá forma que ele estava validando não era a melhor prática. Concordo plenamente com vc !! Programação não é uma ciência exata tem inúmeras formas de atingir o mesmo objetivo o que muda são apenas os padrões que vão ser utilizados.

1 curtida