在Web開發中,經常需要使用Session來保存特定用戶的信息,在我們的程序中很多地方散落著類似下面的語句:
int userAge = (int)this.Session["UserAge"];
我們知道,Session中存放的是鍵值對,鍵是string類型的,如果我們一不小心把上面的語句寫成這樣:
int userAge = (int)this.Session["UseAge"];
編譯期不會發現這個錯誤,但運行時一定會拋出異常,這是在程序中直接操作Session可能引發的問題之一。另外,每次獲取userAge的時候都要寫代碼進行強制轉換,感覺很繁瑣。我們需要一個解決方案來解決這些問題。我的做法是引入一個Session的包裝,使之對象化、強類型化。就像接下來的例子一樣:
public class SessionHelper
{
private HttpSessionState curSession;
public SessionHelper(HttpSessionState session)
{
this.curSession = session;
}
public static SessionHelper CreateInstance(HttpSessionState session)
{
return new SessionHelper(session);
}
public string UserID
{
get
{
return this.curSession["UserID"].ToString();
}
set
{
this.curSession["UserID"] = value ;
}
}
public int UserAge
{
get
{
return (int)this.curSession["UserAge"];
}
set
{
this.curSession["UserAge"] = value ;
}
}
//某用戶上傳的所有圖片
public ArrayList PicList
{
get
{
if (this.curSession["PicList"] == null)
{
this.curSession["PicList"] = new ArrayList();
}
return (ArraayList)this.curSession["PicList"];
}
}
//清空圖片列表
public void ClearAllPics()
{
this.PicList.Clear();
}
}
這樣,我們用起來就非常方便了:
SessionHelper sessionHelper = SessionHelper.CreateInstance(this.Session);
ArrayList picList = sessionHelper.PicList;
//
處理picList中的圖片
sessionHelper.ClearAllPics();
引入這一層包裝,可以使我們的程序的可讀性、可維護性更好,而且將原來的一些運行期的錯誤提前到了編譯期,這也是強類型帶來的好處。