Direi:
"Validate in every place you can do so."
Prima convalidi, prima fornisci un feedback all'utente del sistema. Ciò riduce eventuali errori, offre una formazione pratica e migliora l'esperienza dell'utente.
Devi convalidare la tua logica aziendale, perché ci sono molte regole aziendali che non lo rendono alla tua interfaccia utente. La ragione più importante è che il tuo back-end non può permettersi di fidarti del tuo front end, soprattutto sul web.
Devi convalidare nel tuo repository perché l'interfaccia utente non è l'unico posto in cui puoi apportare modifiche ai tuoi dati.
Specialmente con questa strategia in atto, è molto importante che i dati vengano trattati in modo coerente, anche se non vengono trattati in modo coerente. Il classico problema di questo dilemma è un semplice campo di input dell'area di testo. Può essere non più di 43 byte, per esempio, perché è quello che è definita la dimensione del campo del database.
Tuttavia, l'area di testo in un browser Web può accettare caratteri non ASCII, come accenti e glifi. Quindi, la stringa che arriva nella tua applicazione può adattarsi alla dimensione massima dell'area di testo, ma, quando viene convertita in UTF-8 per l'inserimento nel tuo database, la sua dimensione potrebbe essere leggermente più grande.
Il feedback per l'utente che immette i dati deve avere senso, anche quando non lo fanno (giustamente) per comprendere i dettagli delle codifiche dei caratteri o dei limiti dei campi del database.