2012-01-05 19 views
5

El título casi lo dice, pero aquí hay algunos antecedentes:¿Es una mala práctica escribir un método que no haga nada excepto lanzar una excepción?

Tengo una aplicación ASP.Net MVC donde necesito comprobar una lista de rutas de archivos para la existencia. Si alguna de las rutas no existe, se devuelve un error.

Actualmente, tengo un controlador base donde se implementa el evento OnException. Aquí, se tratan las excepciones no manuales y se devuelve una página de error al usuario con el mensaje de la excepción.

La manera más simple para mí de hacer la comprobación anterior es escribir un método que compruebe la existencia de cada ruta y si alguno de ellos falla, simplemente tiro (y registro) una excepción. Esta excepción es manejada por el controlador base y se devuelve el mensaje apropiado al usuario.

Mi problema es que hacer esto parece una mala práctica. Estoy escribiendo un método que devuelve vacío y su único propósito es lanzar una excepción en el raro caso de que una de las rutas no exista, en la mayoría de los casos no hace nada. ¿Es una mala idea?

+2

¿Qué te hace pensar que está mal? Es una práctica común, incluso puedes ver ejemplos de ella en el código fuente del marco .NET. –

+0

Supongo que se sintió mal. Pero es bueno obtener algunos comentarios de que este no es el caso. – zaq

Respuesta

8

No hay nada de malo en eso.

El .NET framework también lo hace: por ejemplo, CancellationToken tiene un método ThrowIfCancellationRequested que no hace más que tirar o no tirar dependiendo de alguna condición.

Otro ejemplo: Dispatcher 'VerifyAccess método, que comprueba si la persona que llama está en el mismo hilo que se supone que se debe acceder al control, y tira si no.

+0

Ok, está bien saberlo. ¡Gracias! – zaq

0

En .net existe la opción de hacer un lanzamiento nuevo notimplementedexception, por lo que puede crear los métodos e implementarlos más adelante. Entonces, no es una mala práctica, la mala práctica es dejarlos allí cuando se libera la aplicación a la producción. Dar errores sin ninguna razón es una mala práctica.

Para TDD (desarrollo dirigido por prueba) puede ser muy útil también, usted crea el método, y luego la prueba de unidad que falla con la excepción no implementada y finalmente implementa el método para pasar la prueba.

Btw que estaba respondiendo el título de su pregunta, pero debe cambiar el nombre de la pregunta porque su método hace algo. Si hace algo y siempre arroja una excepción es una mala práctica, las excepciones son costosas, debe registrar el error y seguir adelante, sin excepción. Debería hacer una función PathExists que devuelva un booleano, esa es una mejor solución. (incluso si alguien me vota -1 sin ninguna razón ... Heheh)

+0

Te he dado un +1 para animarte a permanecer en el sitio, pero también creo que esta no es una buena respuesta: creo que se pierde el meollo de la pregunta. Su ejemplo con 'NotImplementedException' es completamente diferente. Además, el tercer párrafo de su respuesta nuevamente no está relacionado y debería haberlo publicado como comentario. –

+0

El método en cuestión no siempre arroja una excepción, de hecho, la gran mayoría de las llamadas no arrojarán una excepción.Solo se lanza una excepción si una de las rutas no existe, lo que normalmente no será el caso. Devolver un valor booleano también significa que pierdo información sobre qué camino es inválido. Por cierto, no te voté, tu razonamiento está bien explicado y tiene sentido, pero simplemente no encaja en mi situación. – zaq

+0

Entonces, es un asunto habitual, si falla arroja una excepción, si no, simplemente devuelve vacío. Entonces, no es una mala práctica, es solo un método vacío que verifica algo. – H27studio

0

Algunos pueden decir que es una mala idea pero, a veces, no hay una alternativa sensata. Si desea generar una excepción para comunicar un error a alguna persona que llama (tal vez aislada del creador mediante un código opaco de terceros), hágalo. El árbitro final - '¿funciona?'

Cuestiones relacionadas