Deixe-me dizer sem rodeios desde o início: a maior parte da validação em que seu aplicativo está envolvido – é prejudicial para seus negócios, sua experiência do usuário e para o bom senso.
Eu me deparei com essa constatação recentemente, enquanto trabalhava em um aplicativo da web voltado para o consumidor que provavelmente tinha um dos modelos de dados mais intrincados que tive de enfrentar.
O problema com dados intrincados é que às vezes eles vêm incompletos e às vezes têm um valor errado que não é realmente errado. Por exemplo: você pode anotar seu número de telefone com travessões, quando um aplicativo estiver esperando apenas números. Essas regras internas para seus dados às vezes são tão arbitrárias que as pessoas em sua organização nem conseguem se lembrar delas.
A razão para isso é que o banco de dados está ditando a formatação de dados permitida e os tipos de objetos de dados, e essa autoridade se infiltra na IU.
Não deveria.
Descobri que os únicos lugares em que possivelmente precisaria de uma validação real e difícil – seriam nos portões: durante o registro e o login. Quase todos os outros dados serão melhor verificados, higienizados, definidos para valores padrão ou nulos se necessário, mas nunca NUNCA retornou ao usuário como uma lista de pequenas dicas vermelhas sobre os campos que eles “falharam em preencher”.
Antigamente, o padrão de enviar um formulário e exibi-lo novamente se o banco de dados o rejeitasse era muito comum – Hoje, no entanto, os usuários esperam ser auxiliados pelo aplicativo, por exemplo: veja um rótulo “Novo Arquivo” se eles não definiram um ‘nome do arquivo’. Essa expectativa é algo que não vai embora. Os usuários exigem (e devem receber) uma experiência tranquila, sem a dor da rejeição.
Eu descobri que um mecanismo de edição adequado, com o feedback visual adequado, tem um valor de UX infinitamente melhor do que a validação tradicional. Nossos usuários às vezes podem nos fornecer dados “errados”, mas com certeza precisamos ser capazes de lidar com isso, não reclamar disso.
O uso da função de saneamento em vez das funções de validação parece uma boa experiência do usuário para mim. Mantenha o esquema do banco de dados fora do caminho do usuário. É problema seu, não deles.