CodeProject의 이 기사는 나에게 정말 영감을 주었습니다.
http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx .
저자가 말했듯이 우리는 세션이 만료된 후 저장된 변수의 손실을 방지하기 위해 세션에 저장된 개체를 검색하기 위해 ASP.NET에서 다음과 유사한 많은 코드를 자주 사용합니다.
Int32 nUserID = -1;
if ( null != 세션["사용자 ID"] ) {
if (Session["userID"] is Int32) {
if ( 0 < 세션["사용자 ID"] ) {
nUserID = (Int32) 세션["userID"]
}
}
}
if ( -1 == nUserID )
{
throw new ApplicationException( "예기치 않은 상황: 사용자 ID가 잘못되었습니다." );
}
this.doSomething(nUserID);
이와 같은 코드는 어디에나 있을 것입니다.
따라서 리팩토링을 위해 그의 캡슐화 솔루션을 사용하면 코드가 훨씬 더 간단하고 깔끔해집니다!
캡슐화 후 위의 코드에는 한 문장만 필요합니다:
this.doSomething( CCurrentSession.UserID )
그의 클래스는 아래와 같이 실제로 매우 간단합니다.
시스템 사용;
System.Web 사용
/**////------------------------- -- ----------------------------------
/// M. van Eijkel 개발 - 2005년 8월
/// [e]: [email protected]
/// [w]: www.vaneijkel.com
네임스페이스 VanEijkel.Web
{
/**//// <요약>
/// 세션 객체의 래퍼 클래스입니다.
/// 세션 정보를 검색하고 검증하기 위한 논리를 중앙 집중화합니다.
/// 이와 같은 접근 방식을 사용하면 기존 코드의 보호 및 캡슐화가 향상됩니다.
/// 기존 WebApplication을 개선할 수 있는 간단하고 위험도가 낮으며 관리하기 쉬운 방법을 제공합니다.
/// 그래서 저는 이것을 webRefactoring이라고 부릅니다.
/// </summary>
공개 클래스 CurrentSession
{
상수#region 상수
private const String sMANDATORY_SESSION_KEY_NOT_FOUND_MSG = "세션 변수가 제외되었지만 존재하지 않습니다. 키={0}";
private const String sMANDATORY_SESSION_VALUE_INVALID_NULL = "null 세션 값이 없습니다. 키={0}";
private const Int32 nUSERID_UNKOWN = -1;
개인 const Int32 nUSERID_MINIMUM = 1;
private const String sUSERID_INVALID = "잘못된 사용자 ID:{0}. 사용자 ID는 다음보다 커야 합니다:{1}";
#endregion
UserID#region UserID
/**//// <요약>
/// userID를 객체 대신 Int32로 반환합니다.
/// 이렇게 하면 필요한 컴파일러 보호 및 인텔리전스 지원을 얻을 수 있습니다.
/// </summary>
공개 정적 Int32 사용자 ID
{
얻다
{
return (Int32) GetValueOrDefault( eKeys.UserID, nUSERID_UNKOWN );
}
세트
{
if ( nUSERID_MINIMUM >= 값 )
{
새로운 ApplicationException 발생( String.Format(sUSERID_INVALID, value, nUSERID_MINIMUM ));
}
SetValue(eKeys.UserID, 값);
}
}
#endregion
비공개: GetValueOrDefault( eKeys eKey, 개체 oDefaultValue ) #region 비공개: GetValueOrDefault( eKeys eKey, 개체 oDefaultValue )
/**//// <요약>
/// 세션 개체에서 값을 가져옵니다.
/// </summary>
/// <param name="eKey"> 값을 가져올 세션 키입니다.</param>
/// <param name="oDefaultValue">유효한 값이 저장되지 않은 경우 사용할 기본값입니다.</param>
/// <returns>값이 null이거나 키가 존재하지 않는 경우
/// 지정된 기본값이 반환됩니다.
/// 그렇지 않으면 값이 반환됩니다.</returns>
개인 정적 객체 GetValueOrDefault( eKeys eKey, Object oDefaultValue )
{
//값을 구한다
object oValue = GetValue( eKey );
//값을 찾을 수 없거나 null입니까?
if (null == oValue)
{
//기본값을 반환
oDefaultValue를 반환합니다.
}
//모두 정상: 세션 값을 반환합니다.
o값을 반환합니다.
}
#endregion
개인: GetMandatoryValue( eKeys eKey )#지역 개인: GetMandatoryValue( eKeys eKey )
/**//// <요약>
/// 존재해야 하는 세션 키에 대한 세션 값을 반환합니다.
/// 키가 존재하지 않으면 applicationException이 발생합니다.
/// </summary>
/// <param name="eKey"> 세션 값을 반환할 세션 키입니다. </param>
/// <returns> null이 아닌 값입니다.</returns>
개인 정적 객체 GetMandatoryValue( eKeys eKey )
{
//값을 구한다
object oValue = GetValue( eKey );
//키를 찾을 수 없거나 값이 null입니까?
if(null==o값)
{
//애플리케이션 논리 오류로 인해 applicationException 발생(CLR 없음)
새로운 ApplicationException 발생( String.Format( sMANDATORY_SESSION_KEY_NOT_FOUND_MSG, eKey.ToString() ));
}
//모두 정상: 반환 값
o값을 반환합니다.
}
#endregion
개인: GetValue( eKeys eKey )#지역 개인: GetValue( eKeys eKey )
/**//// <요약>
/// 지정된 키에서 세션 값을 가져옵니다.
/// </summary>
/// <param name="eKey">값을 가져올 키</param>
/// <returns>지정된 세션 키에 대한 세션 값입니다.
/// 키가 존재하지 않으면 null이 반환됩니다.
/// </returns>
개인 정적 객체 GetValue( eKeys eKey )
{
return HttpContext.Current.Items[ eKey.ToString() ];
}
#endregion
private SetMandatoryValue( eKeys eKey, Object oValue )#region private SetMandatoryValue( eKeys eKey, Object oValue )
개인 정적 무효 SetMandatoryValue( eKeys eKey, Object oValue )
{
if(null==o값)
{
throw new ApplicationException( String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL, eKey.ToString() ) );
}
}
#endregion
개인 SetValue( eKeys eKey, 개체 oValue)#region 개인 SetValue( eKeys eKey, 개체 oValue)
/**//// <요약>
/// 지정된 세션 값을 지정된 세션 키에 저장합니다.
/// </summary>
/// <param name="eKey">세션에 저장할 값의 키</param>
/// <param name="oValue">세션에 저장할 값</param>
개인 정적 무효 SetValue (eKeys eKey, Object oValue)
{
HttpContext.Current.Items[eKey.ToString()] = oValue;
}
#endregion
/**//// <요약>
/// 열거형
/// </summary>
개인 열거형 eKey
{
사용자ID
}
}
}