Decidí reescribir mi respuesta para que sea específica para su pregunta real, y en un sentido más amplio que una aplicación MVC no es la única a la que se aplican estas mejores prácticas.
(1) Respuesta. Esto no es una buena práctica. En su lugar, debe usar un método de creación de excepción que arroje HttpException directamente.
public static void ThrowPageNotFoundException() {
throw new HttpException((Int32)HttpStatusCode.NotFound, "HTTP/1.1 404 Not Found");
}
(2) DO. Use métodos de creación de excepciones (por ejemplo, el código que proporcioné). Esto le permite evitar el costo de rendimiento adicional de tener su propio tipo de excepción, y permite que esté en línea. Los miembros que lanzan excepciones no son incluidos. Este sería el sustituto adecuado para tirar por conveniencia.
(3) DO.Utilice excepciones de biblioteca de clase base siempre que sea posible, y solo cree una excepción personalizada cuando no haya absolutamente ninguna excepción base que cumpla con los requisitos necesarios. La creación de excepciones personalizadas agrega una jerarquía de excepciones más profunda, lo que hace que la depuración sea más difícil cuando no es necesario, agrega una sobrecarga de rendimiento adicional y también agrega un exceso de inflado a su base de código.
(4) NO. Lanza la clase base System.Exception. Use un tipo de excepción específico en su lugar.
(5) NO. Crea excepciones personalizadas para mayor comodidad. Esta no es una buena razón para una excepción personalizada, porque las excepciones son intrínsecamente costosas.
(6) NO. Crea excepciones personalizadas solo para tener tu propio tipo de excepción.
(7) NO. Lanza excepciones que se pueden evitar cambiando el código de llamada. Esto sugeriría que tiene un error de usabilidad en la API en lugar de un problema real.
Cualquier persona que haya leído las Pautas de diseño de Framework de la serie de desarrollo .NET conocerá estas prácticas, y son muy buenas prácticas. Estas son las prácticas sobre las que se construyó el framework .NET, y MVC también.
Es un sitio web de MVC. Al solicitar una entidad con ID que no existe, arrojo un error 404. ¿Qué hay de malo con eso? StackOverflow usa este método. Intenta ir a http://stackoverflow.com/questions/1022181121312312331 – Marko
Las excepciones son cualquier cosa menos rápidas. Lanzar una excepción ocurre en estados excepcionales: un método en línea no tiene sentido en este caso. – zmbq
Incorrecto. Uno de los errores más comunes es que los desarrolladores a menudo piensan que las excepciones son por condiciones excepcionales. El rendimiento y las optimizaciones con excepciones SI importan. –