¿Cómo debo manejar la entrada de usuario no válida?

He estado pensando en este tema por un tiempo y me gustaría tener opiniones de otros desarrolladores. Tiendo a tener un estilo de programación muy defensivo. Mi bloque o método típico se ve así: T foo(par1, par2, par3, ...) { // Check that all parameters are correct, return undefined (null) //...