As classes de dados podem conter métodos para validação?

5

OK, digamos que eu tenha uma classe de dados para um usuário:

public class User {
private String firstName;
private String lastName;
private long personCode;
private Date birthDate;
private Gender gender;
private String email;
private String password;

Agora, digamos que eu queira validar o email, se os nomes não estão vazios, se a data de nascimento está no intervalo normal, etc. Posso colocar esse método de validação nesta classe junto com os dados? Ou deveria estar no UserManager que no meu caso lida com as listas desses usuários?

    
por Arturas M 23.10.2012 / 23:48
fonte

4 respostas

4

Você pode definitivamente validar esses atributos em seus setters (). Ao contrário dos getters que são destinados a retornar valores, os setters são métodos para designar um valor por meio de um argumento / parâmetro.

Idealmente, eu aconselho você a escrever métodos separados e ter seus valores de retorno verdadeiro ou falso. para validar seus atributos de classe, particularmente quando a validação é bastante extensa.

Exemplos:

bool validateEmail(string email) {

}

bool validatePassword(string pwd) {

}

bool validateBirthdate(date dob) {

}

Eu prefiro aconselhar a validar seus atributos de classe na camada de lógica de negócios. Gostaria de saber se você conhece a arquitetura lógica do software. FYI: BLL

Além disso, se você tiver um banco de dados, é melhor validá-lo por meio das restrições .

    
por 23.10.2012 / 23:58
fonte
2

Não coloque o código que realmente faz a lógica de validação com a própria classe - veja Princípio do SRP . E se você codificasse alguma validação para algo que pudesse ser útil para outra classe (por exemplo, validação de email)? Extraia cada tipo de lógica de validação para sua própria classe separada.

    
por 25.10.2012 / 17:32
fonte
1

Se você está codificando em Java, dê uma olhada em Validação de bean , isso faz parte da especificação Java EE 6. Ele usa metadados (anotações) para ajudar no manuseio de validação. A validação do bean também pode ser usada em outras camadas.

Espero que ajude você.

    
por 24.10.2012 / 00:26
fonte
1

Em suma, SIM, você pode implementar definitivamente esse método de validação em uma classe.

Eu também aconselharia definir método de validação (ou métodos) através de uma interface comum como IValidate. Será parecido com:

public class User: IValidate 
{}

Você pode definir a assinatura genérica do método public bool IsValid() e outras que fazem sentido no contexto fornecido.

    
por 24.10.2012 / 00:36
fonte