다른 사람들이 말한 것을 따르십시오. 나는 두 개의 레이어를 갖는 경향이 있습니다.
핵심 계층. 이것은 거의 모든 웹 앱 프로젝트에 추가되는 DLL 내에 있습니다 . 여기에는 세션 상태 게터 / 세터에 대한 지저분한 작업을 수행하는 SessionVars 클래스가 있습니다. 다음과 같은 코드가 포함되어 있습니다.
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;
}
}
모든 유형을 얻기위한 제네릭에 유의하십시오.
그런 다음 특정 유형, 특히 문자열에 대해 Getters / Setters를 추가합니다. 사용자에게 제공되는 변수에 대해 null이 아닌 string.Empty로 작업하는 것을 선호하기 때문입니다.
예 :
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);
}
등등...
그런 다음 래퍼를 만들어이를 추상화하고 응용 프로그램 모델로 가져옵니다. 예를 들어 고객 세부 정보가있는 경우 :
public class CustomerInfo
{
public string Name
{
get
{
return SessionVar.GetString("CustomerInfo_Name");
}
set
{
SessionVar.SetString("CustomerInfo_Name", value);
}
}
}
아이디어가 맞습니까? :)
참고 : 수락 된 답변에 댓글을 추가 할 때 생각을했습니다. 상태 서버를 사용할 때 세션에 객체를 저장할 때 항상 객체를 직렬화 할 수 있는지 확인하십시오. 웹 팜에있을 때 제네릭을 사용하여 개체를 저장하고 저장하는 것은 너무나 쉬울 수 있습니다. 저는 직장에서 웹 팜에 배포하므로 코어 계층의 코드에 개체가 직렬화 가능한지 확인하기 위해 검사를 추가했습니다. 세션 게터 및 세터를 캡슐화하는 또 다른 이점입니다.