public class Funcionario {
private String nome, cargo;
private double salario;
private int id;
public Funcionario(String nome, String cargo, double salario, int id) {
this.nome = nome;
this.cargo = cargo;
this.salario = salario;
this.id = id;
}
Com getters e setters da mesma forma que está o construtor.
Sabendo que o projeto está sendo trabalhado no modelo MVC, qual seria a melhor forma de proibir que o valor salario seja negativo? No construtor e setters ou em algum outro arquivo?
E se for aqui na classe da entidade, existe alguma forma de eu lançar uma exceção que destrua o objeto?
Não acho interessante você aplicar esse tipo de validação no construtor ou nos setters/getters, crie um método que verifica se o valor está negativo, se sim, lance uma exceção.
A partir do momento que você instâncía um objeto é reservada memória. Se houver a validação antes da atribuição ao atributo salário, o mesmo não chegará a ser inicializado com o respectivo valor negativo.
Então a melhor ideia seria ter uma classe separada que valide as informações e eu só crio um novo objeto da classe Funcionário se todas as validações retornarem sucesso.
Seria isso?
[quote=Deleu]Então a melhor ideia seria ter uma classe separada que valide as informações e eu só crio um novo objeto da classe Funcionário se todas as validações retornarem sucesso.
Seria isso?[/quote]
Não, apenas crie um método na sua classe Funcionário. Eu não acho interessante existir uma classe Funcionário e uma classe ValidaQuesitosFuncionários. Mantenha as regras de negócios pertinentes à classe Funcionário na própria classe Funcionário.
[quote=getAdicted]Não acho interessante você aplicar esse tipo de validação no construtor ou nos setters/getters, crie um método que verifica se o valor está negativo, se sim, lance uma exceção.
[]'s[/quote]
Apenas uma pequena correção: é uma boa prática colocar validações nos setters e construtores, assim garante-se que o estado do objeto jamais estará inconsistente.
Mas nada impede de ter essa condição em algum outro lugar, de forma explícita. Por exemplo, em um javascript de validação de formulário, ou na validação de parâmetros de entrada de um serviço, etc.
Dessa forma a lógica da validação fica mais clara e está em pontos onde é mais fácil gerar mensagens amigáveis aos usuários.
[quote=gomesrod][quote=getAdicted]Não acho interessante você aplicar esse tipo de validação no construtor ou nos setters/getters, crie um método que verifica se o valor está negativo, se sim, lance uma exceção.
[]'s[/quote]
Apenas uma pequena correção: é uma boa prática colocar validações nos setters e construtores, assim garante-se que o estado do objeto jamais estará inconsistente.
Mas nada impede de ter essa condição em algum outro lugar, de forma explícita. Por exemplo, em um javascript de validação de formulário, ou na validação de parâmetros de entrada de um serviço, etc.
Dessa forma a lógica da validação fica mais clara e está em pontos onde é mais fácil gerar mensagens amigáveis aos usuários.[/quote]
Olá gomesrod,
Obrigado pela correção, pensando dessa maneira, sim, eu concordo. Dessa forma cada acesso ao atributo já viria com a validação, interessante! :thumbup:
Pois é, teoricamente deveríamos sempre fazer isso, de forma a evitar a todo custo que os objetos fiquem com estado inválido (afinal, com a validação fora não há como garantir que ela será chamada).
Mas na prática dificilmente o fazemos, geralmente a validação fica só em um método fora do objeto mesmo. E nos acostumamos tanto com isso que a validação no setter chega a parecer esquisita…
[quote=gomesrod]Pois é, teoricamente deveríamos sempre fazer isso, de forma a evitar a todo custo que os objetos fiquem com estado inválido (afinal, com a validação fora não há como garantir que ela será chamada).
Mas na prática dificilmente o fazemos, geralmente a validação fica só em um método fora do objeto mesmo. E nos acostumamos tanto com isso que a validação no setter chega a parecer esquisita…
[/quote]
Concordo, estamos tão condicionados a não vermos isso que quando vemos, machuca os olhos