É uma boa prática usar exceções e lançar / capturar exceções em vez de retornar 0 ou 1 de funções e usar if / else para manipular os erros. Dessa forma, é mais fácil informar o usuário sobre o problema.
Não não não!
Não misture exceções e erros. Exceções são, bem, excepcionais. Erros não são. Quando você solicita que um usuário insira uma quantidade de produto e o usuário digita "olá", é um erro. Não é uma exceção: não há nada de excepcional em ver uma entrada inválida do usuário. Por que você não pode usar exceções em casos não excepcionais, como na validação de entrada? Outras pessoas já explicaram e mostraram uma alternativa válida para validação de entrada.
Isso também significa que o usuário não se preocupa com suas exceções , e mostrar as exceções é hostil e perigoso . Por exemplo, uma exceção durante a execução de uma consulta SQL frequentemente revela a própria consulta. Tem certeza de que deseja correr o risco de mostrar essa mensagem a todos?
mais de uma coisa pode dar errado, como um problema no banco de dados, uma entrada duplicada, um problema no servidor etc. Quando um problema ocorre durante o registro, o usuário precisa conhecê-lo.
Errado. Como usuário, não preciso conhecer os problemas de seu banco de dados, entradas duplicadas etc. Não me importo com seus problemas. O que eu faço precisa saber é que eu entrei um nome de usuário que já existe. Como já foi dito, uma entrada errada minha deve desencadear um erro, não uma exceção.
Como gerar esses erros? Depende do contexto. Para um nome de usuário já usado, eu gostaria de ver uma pequena bandeira vermelha aparecendo perto do nome de usuário, antes mesmo de enviar o formulário, dizendo que o nome de usuário já está sendo usado. Sem JavaScript, o mesmo sinalizador deve aparecer após o envio.
Para outros erros, você mostraria uma página inteira com um erro ou escolheria outra maneira de informar ao usuário que algo deu errado (por exemplo, uma mensagem que será exibida e desaparecerá na parte superior da página). A questão está relacionada mais à experiência do usuário do que à programação.
Do ponto de vista dos programadores, dependendo do tipo de erro, você o propagará de maneiras diferentes. Por exemplo, no caso de um nome de usuário já utilizado, uma solicitação AJAX http://example.com/?ajax=1&user-exists=John
retornará um objeto JSON indicando:
- Que o usuário já existe,
- A mensagem de erro para mostrar ao usuário.
O segundo ponto é importante: você deseja garantir que a mesma mensagem apareça ao enviar o formulário com o JavaScript desativado e digitar um nome de usuário duplicado com o JavaScript ativado. Você não deseja duplicar o texto da mensagem de erro no código-fonte do servidor e em JavaScript!
Essa é realmente a técnica usada pelos sites Stack Exhange. Por exemplo, se eu tentar aprovar minha própria resposta, a resposta AJAX conterá o erro a ser exibido:
{"Success":false,"Warning":false,"NewScore":0,"Message":"You can't vote for your own post.",
"Refresh":false}
Você também pode escolher outra abordagem e predefinir os erros na página HTML antes do preenchimento do formulário. Prós: você não precisa enviar a mensagem de erro na resposta AJAX. Contras: e a acessibilidade? Tente navegar na página sem CSS e você verá todos os erros possíveis.