Comment dois-je gérer les entrées utilisateur non valides?

Je réfléchis à ce problème depuis un certain temps et je serais curieux d'avoir des opinions d'autres développeurs. J'ai tendance à avoir un style de programmation très défensif. Mon bloc ou méthode typique ressemble à ceci: T foo(par1, par2, par3, ...) { // Check that all parameters are correct,...