martes, 26 de abril de 2011

Crear un IQueryable<> vacio… no nulo.

Como estoy en plena manía persecutoria de los métodos que me devuelvan null, me he encontrado que tenía que utilizar una colección del tipo IQueryable<> tipada que podía devolverme null.

Para evitar eso, me dije que daba definía un IQueryable<> vacío, no nulo, y así me evitaba de problemas.

    IQueryable<tipoDeObjeto> listadoVehiculos = Enumerable.Empty<tipoDeObjeto>().AsQueryable<tipoDeObjeto>();

Y ya ta.

lunes, 4 de abril de 2011

Como capturar TODOS los errores de una aplicación ASP.NET

En un interesante debate en AltNetHispano, hemos estado dando vueltas a cómo evitar que una excepción llegue a la capa de representación.
La mejor práctica sería tener controladas las excepciones con un try-catch en los sitios adecuados y una clase o clases que sepan que hacer en cada caso.
Pero, y como muestra de una mala práctica levada a cabo por motivos más que oscuros, he enseñado un código que hicimos que se traga TODOS las expeciones sin dejar la más mínima traza:
En el fichero Global.asax. Si ese que casi nadie se acuerda de que aún existe y tiene muchas cosas buenas. Ponemos:
void Application_Error(object sender, EventArgs e)
{
  Context.Server.ClearError();
  Response.Redirect(Request.RawUrl);
}
Si en vez de la barbaridad que pusimos en su momento, lo utilizas como punto único de captura de las excepciones y lo mandas a las clases adecuadas, te facilitas mucho la vida utilizando las herramientas que el propio asp.net nos ofrece. Y evitamos estar reinventando la rueda haciendo Handles globales para las excepciones.