none
¿Que tan recomendable es lanzar excepciones? RRS feed

  • Pregunta

  • Buenas Amigos.
    Quería consultarles que tan recomendable es lanzar una excepción en el código como por ejemplo

    var listaEmpleados = ObtenerListaEmpleados();

    if(listaEmpleados  != null )

    {

    }

    else

    {

    // que tan recomendable es hacer esto en una aplicación 

    throw new Exception("La lista es nula ");

    }

    O lo mejor es no lanzar una excepción  sino escribir el evento en el log y mostrar un mensaje genérico al usuario final 


    • Editado StevenCR27 jueves, 12 de marzo de 2020 22:55
    jueves, 12 de marzo de 2020 22:20

Respuestas

  • El criterio es que la excepción debería ser excepcional. Por ejemplo, puedes lanzar la excepción de que "la lista es nula" cuando se supone que las cosas están diseñadas y previstas de forma que la lista no sea nunca nula, por lo que si resulta ser nula quiere decir que algo no ha funcionado como estaba previsto y se ha producido un error.

    En ese caso, se lanza la excepción en el lugar donde se ha detectado ese error. La excepción "sube" por el Stack hasta llegar a algún sitio donde se pueda gestionar el error, en donde posiblemente se grabará un registro en el Log y si es pertinente se mostrará un mensaje al usuario (no necesariamente igual de técnicamente detallado como el que se graba en el Log).

    Para situaciones "previstas", por ejemplo, si se va a acceder a un archivo y está previsto que el archivo no exista, en cuyo caso hay que crearlo, entonces no se lanza una excepción sino que se mete un "if" y se procesa debidamente propagando el dato que sea necesario para ello a través de las llamadas.

    • Marcado como respuesta StevenCR27 viernes, 13 de marzo de 2020 1:23
    jueves, 12 de marzo de 2020 22:43
    Moderador
  • hola

    depende, en que contexto esta ese codigo? si es codigo de la interfaz de usuario entonces lanzar un exception no tiene sentido

    Ahora si esta en alguna otra capa y quieres informar de un problema y no hay un objeto que puedas retornar informando como resulto la operacion, en ese caso quizas se podria aplicar

    Si esta en la capa de negocio podrias simplemente validarlo he informar directo

    pulic void button1_click(...)
    {
    
    	var listaEmpleados = ObtenerListaEmpleados();
    
    	if(listaEmpleados == null )
    	{
    		MessageBox.Show("La lista es nula ");
    		return;
    	}
    
    	//resto codigo
    }

    si quieres loguearlo porque obtienes algun detalle para anlizar luego tambien se puede

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta StevenCR27 viernes, 13 de marzo de 2020 1:22
    jueves, 12 de marzo de 2020 23:25

Todas las respuestas

  • El criterio es que la excepción debería ser excepcional. Por ejemplo, puedes lanzar la excepción de que "la lista es nula" cuando se supone que las cosas están diseñadas y previstas de forma que la lista no sea nunca nula, por lo que si resulta ser nula quiere decir que algo no ha funcionado como estaba previsto y se ha producido un error.

    En ese caso, se lanza la excepción en el lugar donde se ha detectado ese error. La excepción "sube" por el Stack hasta llegar a algún sitio donde se pueda gestionar el error, en donde posiblemente se grabará un registro en el Log y si es pertinente se mostrará un mensaje al usuario (no necesariamente igual de técnicamente detallado como el que se graba en el Log).

    Para situaciones "previstas", por ejemplo, si se va a acceder a un archivo y está previsto que el archivo no exista, en cuyo caso hay que crearlo, entonces no se lanza una excepción sino que se mete un "if" y se procesa debidamente propagando el dato que sea necesario para ello a través de las llamadas.

    • Marcado como respuesta StevenCR27 viernes, 13 de marzo de 2020 1:23
    jueves, 12 de marzo de 2020 22:43
    Moderador
  • hola

    depende, en que contexto esta ese codigo? si es codigo de la interfaz de usuario entonces lanzar un exception no tiene sentido

    Ahora si esta en alguna otra capa y quieres informar de un problema y no hay un objeto que puedas retornar informando como resulto la operacion, en ese caso quizas se podria aplicar

    Si esta en la capa de negocio podrias simplemente validarlo he informar directo

    pulic void button1_click(...)
    {
    
    	var listaEmpleados = ObtenerListaEmpleados();
    
    	if(listaEmpleados == null )
    	{
    		MessageBox.Show("La lista es nula ");
    		return;
    	}
    
    	//resto codigo
    }

    si quieres loguearlo porque obtienes algun detalle para anlizar luego tambien se puede

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    • Marcado como respuesta StevenCR27 viernes, 13 de marzo de 2020 1:22
    jueves, 12 de marzo de 2020 23:25