2009-10-15 12 views
10

¿Alguien puede arrojar algo de luz sobre los pros y contras de lanzar excepciones personalizadas (que heredan de System.Exception), o la forma correcta de usarlas? Ya conozco cuándo y cuándo no lanzar la excepción, pero estoy buscando orientación sobre cómo crear mis propias excepciones personalizadas..NET Throwing Custom Exceptions

+1

Dupe: http://stackoverflow.com/questions/417428/why-create-custom-exceptions –

+0

Yo no llamaría esto una estafa, cerca, pero no del todo en mi libro, tal vez no fui lo suficientemente claro en mi pregunta. – andrewWinn

+0

Esto es sin duda una mejor redacción que el duplicado vinculado. Voy a votar para reabrir si se cierra. – Randolpho

Respuesta

9

Todas estas son buenas publicaciones. Hasta ahora, estoy más de acuerdo con Brian Rasmussen: cree excepciones personalizadas cuando quiera manejar diferentes tipos de excepciones específicas.

Quizás un ejemplo ayude. Este es un ejemplo artificial, y puede o no ser útil en el código cotidiano. Supongamos que tiene una clase responsable de autenticar a un usuario. Esta clase, además de autenticar a un usuario, tiene un mecanismo de bloqueo para bloquear a un usuario después de varios intentos fallidos. En tal caso, puede diseñar como parte de las excepciones personalizadas de clase dos: AuthenticationFailedException y UserLockedOutException. Su método AuthenticateUser simplemente volvería sin tirar si el usuario se autenticó con éxito, tira AuthenticationFailedException si el usuario no autenticó, o tira UserLockedOutException si el usuario estaba bloqueado.

Por ejemplo:

try 
{ 
    myAuthProvider.AuthenticateUser(username, password); 
    ShowAuthSuccessScreen(); 
} 
catch(AuthenticationFailedException e) 
{ 
    LogError(e); 
    ShowAuthFailedScreen(); 
} 
catch(UserLockedOutException e) 
{ 
    LogError(e); 
    ShowUserLockedOutScreen(); 
} 
catch(Exception e) 
{ 
    LogError(e); 
    ShowGeneralErrorScreen(); 
} 

De nuevo, un ejemplo artificial. Pero, con suerte, muestra cómo y por qué querría crear excepciones personalizadas. En este caso, el usuario de la clase AuthProvider está manejando cada excepción personalizada de una manera diferente.Si el método AuthenticateUser simplemente hubiera lanzado Exception, no habría forma de diferenciar entre las diferentes razones por las cuales se produjo la excepción.

+1

buena explicación, con ejemplos obtiene mi voto a favor. – andrewWinn

1

Las excepciones personalizadas le permiten proporcionar excepciones claras y significativas, lo que a su vez puede hacer que su biblioteca sea más útil, siempre que use las excepciones existentes siempre que sea apropiado.

Cree una excepción personalizada cada vez que necesite presentar una excepción que no se ajuste directamente al modelo de excepción del marco.

4

Utilice sus propias excepciones para marcar los errores que son específicos de su aplicación/dominio. La ventaja es que tus bloques catch pueden filtrar las excepciones correctas y actuar sobre eso. Use excepciones estándar específicas para todo lo demás.