Le classi di dati possono contenere metodi per la convalida?

5

OK, dire che ho una classe dati per un utente:

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

Ora diciamo che voglio convalidare la posta elettronica, se i nomi non sono vuoti, se la data di nascita è nel range normale, ecc. Posso mettere quel metodo di validazione in questa classe insieme ai dati? O dovrebbe essere in UserManager che nel mio caso gestisce gli elenchi di questi utenti?

    
posta Arturas M 23.10.2012 - 23:48
fonte

4 risposte

4

Puoi sicuramente convalidare questi attributi nei tuoi setter (). A differenza dei getter che hanno lo scopo di restituire valori, i setter sono metodi per assegnare un valore tramite un argomento / parametro.

Idealmente, ti consiglierei di scrivere metodi separati e avere i loro valori di ritorno veri o falsi. per convalidare gli attributi della tua classe in particolare quando la validazione è abbastanza ampia.

Esempi:

bool validateEmail(string email) {

}

bool validatePassword(string pwd) {

}

bool validateBirthdate(date dob) {

}

Preferisco consigliare di convalidare gli attributi della classe nel livello della logica aziendale. Mi chiedo se conosci l'architettura logica del software. A proposito: BLL

Inoltre, se hai un database, è meglio farli convalidare tramite i vincoli .

    
risposta data 23.10.2012 - 23:58
fonte
2

Non inserire il codice che effettivamente fa la logica di validazione con la classe stessa - vedi principio SRP . E se dovessi codificare qualche convalida per qualcosa che potrebbe essere utile in un'altra classe (ad esempio la convalida dell'email)? Estrarre ciascun tipo di logica di convalida in una classe separata.

    
risposta data 25.10.2012 - 17:32
fonte
1

Se stai codificando in Java, dovresti dare un'occhiata a Convalida dei bean , fa parte della specifica Java EE 6. Usa metadati (annotazioni) per aiutare la gestione della validazione. La convalida del bean può essere utilizzata anche in altri livelli.

Spero ti possa aiutare.

    
risposta data 24.10.2012 - 00:26
fonte
1

In breve, SÌ puoi implementare definitivamente il metodo di convalida su una classe.

Vorrei anche consigliare di definire il metodo di validazione (o metodi) attraverso un'interfaccia comune come IValidate. Sembrerà un po 'come:

public class User: IValidate 
{}

Puoi definire la generica firma del metodo public bool IsValid() e altre che hanno senso nel contesto specificato.

    
risposta data 24.10.2012 - 00:36
fonte

Leggi altre domande sui tag