Cuando usar una excepción definida por el usuario y algunos buenos ejemplos / mejores prácticas?

StackOverflow https://stackoverflow.com/questions/2600607

Pregunta

Me daría por sentado que la mayoría de las excepciones definidas por el usuario son las excepciones de nivel de lógica de negocios, pero ¿cuáles son algunas de las razones que conviene utilizar una excepción definida por el usuario y cuáles son algunos ejemplos de buenas?

Es única ventaja de una excepción definida por el usuario que se puede definir un mensaje de error consistente?

¿Qué lógica puede ser escrita en el interior excepciones para que sean realmente más útil?

Después de todo, no puedes hacer esto: throw new Exception("Some Error Message");

¿Fue útil?

Solución

Tener excepciones definidas por el usuario es útil porque le permite manejar diferentes tipos de errores de una manera específica. ¿Por qué definir .NET tantos tipos diferentes de excepciones si sólo se ponían todas las excepciones como System.Exception con un mensaje de texto diferente? La razón por la que hay diferentes tipos de excepciones en .NET es que se puede tomar distintos tipos de errores y manejar de manera diferente. Esa es la misma razón debe definir sus propias excepciones de usuario - para que pueda dar una respuesta diferente, basado en el tipo de excepción que se produjo.

También puede crear excepciones definidas por el usuario que incluyen datos adicionales. Por ejemplo, se podría definir un nivel de gravedad sobre la base de una enumeración, un código de error entero o cualquier otra cosa que pueda ser útil al programa de llamada para identificar lo que salió mal. En cuanto a la lógica de incluir en las excepciones, por lo general sólo trato de informar de lo que salió mal y salir de la lógica (qué hacer con el error) al programa de llamada. En algunos casos, tengo el código de excepción escribir automáticamente el error a un archivo de registro si se ha superado un cierto nivel de gravedad (por ejemplo, las advertencias son lanzados, pero sólo los errores críticos se escriben en el archivo de registro).

Otros consejos

Debe crear muy pocas excepciones definidas por el usuario. Sólo deben usarse si alguien va a detectar la excepción y hacer algo específico con ella. Si tirar su excepción en lugar de InvalidOperationException no va a hacer que el código se comportan de manera diferente, a continuación, tirar InvalidOperationException.

Hay un buen montón de excepciones ya en el marco de .NET, que se debe utilizar si se puede encontrar uno que se podría utilizar para su circunstancia excepcional.

Por ejemplo, en mis clases de configuración (que normalmente son envoltorios de todo el ConfigurationManager) lanzo ConfigurationErrorsException cuando cada vez un valor no puede ser analizado correctamente.

Al analizar los valores personalizados a partir de texto o cualquier otra cosa que requiere un formato specfic y falla el análisis, lanzo un FormatException

Sin embargo, si mi objetivo BankAccount no tiene suficiente dinero en él para mí para retirar £ 10, entonces voy a escribir y tirar InsufficentFundsException porque entonces de esa manera puedo gestionar el caso de error específico, si es que se produce.

Espero que esto (algo) ayuda.

No, ellos no son sólo para los mensajes. Puede buscar aquellas definidas por el usuario en la lista de excepciones de un bloque catch.

catch(UserDefinedException){}
catch(Exception){}

Puede utilizar las excepciones definidas por el usuario en cualquier momento que desee buscar algo específico que se produce. Tal vez un ID de cliente está fuera de un rango especificado y que desea buscar esa forma específica. En lugar de tener que analizar el mensaje de error (que puede ser un dolor, y es propenso a errores, como si el mensaje cambia después en el camino), tiene una excepción que utiliza y usted sabe que en algún otro lugar del código está diciendo específicamente que "Hey esto sucedió. es necesario ser consciente de ello."

excepciones definidas por el usuario se puede utilizar dentro de un componente para permitir que los consumidores del componente de la capacidad para su captura con un nivel mayor de granularidad entonces el bloque catch (Excepción). Esto proporcionará al consumidor componente con la capacidad de realizar diferentes tareas, en base a la cual se inició una excepción. excepciones definidas por el usuario sólo debe realmente ser creados cuando hay una expectativa real de que los consumidores van a usar para diferenciar de esta manera.

También puede añadir propiedades a almacenar metadatos adicionales con una excepción definida por el usuario, como por ejemplo un código de error (por ejemplo, cuando se llama a una API no administrada). Esto es más fácil de usar que simplemente poner cosas en la propiedad del objeto de datos de excepción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top