Considera un'applicazione in cui aggiungi un indirizzo email al suo profilo e lo invia.
Abbiamo qualche controversia nel nostro team su come convalidare questo indirizzo email. Alcuni sviluppatori (incluso me) credono che dovremmo convalidare questa semplice stringa tramite un metodo di estensione:
bool isValid = newEmail.IsEmail();
Sostengono che qualsiasi meccanismo di validazione diverso da una singola chiamata al metodo sarebbe overhead e un anti-pattern (contro il principale di KISS).
Mentre altri sostengono che questa email dovrebbe prima essere aggiunta a una nuova istanza di UserEmail
DTO, allora tale DTO dovrebbe essere passato a un validatore pertinente:
UserEmail userEmail = new UserEmail() { Email = newEmail };
bool isValid = new UserEmailValidator().Validate(userEmail);
Il secondo gruppo sostiene che la convalida di una singola proprietà non ha senso, perché una proprietà non può esistere da sola. Quindi dovremmo sempre convalidare un oggetto, non una proprietà (intendo, proprietà del tipo di valore, come stringhe e interi, ecc.)
Quali vantaggi e svantaggi potrebbero avere ciascun approccio?