Para seguir con lo que otros han dicho. Tiendo a tener dos capas:
La capa del núcleo. Esto se encuentra dentro de una DLL que se agrega a casi todos los proyectos de aplicaciones web. En esto tengo una clase SessionVars que hace el trabajo ronco para getters/setters de estado de sesión. Contiene código como el siguiente:
public class SessionVar
{
static HttpSessionState Session
{
get
{
if (HttpContext.Current == null)
throw new ApplicationException("No Http Context, No Session to Get!");
return HttpContext.Current.Session;
}
}
public static T Get<T>(string key)
{
if (Session[key] == null)
return default(T);
else
return (T)Session[key];
}
public static void Set<T>(string key, T value)
{
Session[key] = value;
}
}
Tenga en cuenta los genéricos para obtener cualquier tipo.
Luego agrego Getters/Setters para tipos específicos, especialmente cadenas, ya que a menudo prefiero trabajar con cadenas. Vacío en lugar de nulo para las variables presentadas a los usuarios.
e.g:
public static string GetString(string key)
{
string s = Get<string>(key);
return s == null ? string.Empty : s;
}
public static void SetString(string key, string value)
{
Set<string>(key, value);
}
Y así sucesivamente ...
entonces crear contenedores para abstraer eso y llevarlo hasta el modelo de aplicación. Por ejemplo, si tenemos los datos del cliente:
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
Usted consigue la idea correcta? :)
NOTA: Apenas tuve un pensamiento al agregar un comentario a la respuesta aceptada. Siempre asegúrese de que los objetos sean serializables cuando los almacena en Sesión cuando usa un servidor de estado. Puede ser muy fácil intentar y guardar un objeto usando los genéricos cuando está en la granja de servidores web y se dispara. Despliegue en una granja de servidores web en el trabajo, así que agregué cheques a mi código en la capa central para ver si el objeto es serializable. Otra ventaja de encapsular Session Getters y Setters :)
Gracias por proporcionar respuestas completas. ¡Muy bueno! –
No hay problema, HTH:) –
Gran enfoque! He estado usando algo similar durante mucho tiempo, pero no he incorporado genéricos. Esto evita tantos problemas con diferentes desarrolladores que crean variables de sesión similares. – DOK