在Web开发中,经常需要使用Session来保存特定用户的信息,在我们的程序中很多地方散落着类似下面的语句:
intuserAge=(int)this.Session["UserAge"];
我们知道,Session中存放的是键值对,键是string类型的,如果我们一不小心把上面的语句写成这样:
intuserAge=(int)this.Session["UseAge"];
编译期不会发现这个错误,但运行时一定会抛出异常,这是在程序中直接操作Session可能引发的问题之一。另外,每次获取userAge的时候都要写代码进行强制转换,感觉很繁琐。我们需要一个解决方案来解决这些问题。我的做法是引入一个Session的包装,使之对象化、强类型化。就像接下来的例子一样:
这样,我们用起来就非常方便了:
引入这一层包装,可以使我们的程序的可读性、可维护性更好,而且将原来的一些运行期的错误提前到了编译期,这也是强类型带来的好处。
intuserAge=(int)this.Session["UserAge"];
我们知道,Session中存放的是键值对,键是string类型的,如果我们一不小心把上面的语句写成这样:
intuserAge=(int)this.Session["UseAge"];
publicclassSessionHelper
{
privateHttpSessionStatecurSession;
publicSessionHelper(HttpSessionStatesession)
{
this.curSession=session;
}
publicstaticSessionHelperCreateInstance(HttpSessionStatesession)
{
returnnewSessionHelper(session);
}
publicstringUserID
{
get
{
returnthis.curSession["UserID"].ToString();
}
set
{
this.curSession["UserID"]=value;
}
}
publicintUserAge
{
get
{
return(int)this.curSession["UserAge"];
}
set
{
this.curSession["UserAge"]=value;
}
}
//某用户上传的所有图片
publicArrayListPicList
{
get
{
if(this.curSession["PicList"]==null)
{
this.curSession["PicList"]=newArrayList();
}
return(ArraayList)this.curSession["PicList"];
}
}
//清空图片列表
publicvoidClearAllPics()
{
this.PicList.Clear();
}
}
{
privateHttpSessionStatecurSession;
publicSessionHelper(HttpSessionStatesession)
{
this.curSession=session;
}
publicstaticSessionHelperCreateInstance(HttpSessionStatesession)
{
returnnewSessionHelper(session);
}
publicstringUserID
{
get
{
returnthis.curSession["UserID"].ToString();
}
set
{
this.curSession["UserID"]=value;
}
}
publicintUserAge
{
get
{
return(int)this.curSession["UserAge"];
}
set
{
this.curSession["UserAge"]=value;
}
}
//某用户上传的所有图片
publicArrayListPicList
{
get
{
if(this.curSession["PicList"]==null)
{
this.curSession["PicList"]=newArrayList();
}
return(ArraayList)this.curSession["PicList"];
}
}
//清空图片列表
publicvoidClearAllPics()
{
this.PicList.Clear();
}
}
这样,我们用起来就非常方便了:
SessionHelpersessionHelper=SessionHelper.CreateInstance(this.Session);
ArrayListpicList=sessionHelper.PicList;
//
处理picList中的图片
sessionHelper.ClearAllPics();
ArrayListpicList=sessionHelper.PicList;
//

处理picList中的图片sessionHelper.ClearAllPics();
引入这一层包装,可以使我们的程序的可读性、可维护性更好,而且将原来的一些运行期的错误提前到了编译期,这也是强类型带来的好处。
Web开发中直接操作Session可能引发运行时异常,且强制转换繁琐。引入Session的包装,使之对象化、强类型化,如创建SessionHelper类。这样使用更方便,能提高程序的可读性和可维护性,还可将运行期错误提前到编译期。
4048

被折叠的 条评论
为什么被折叠?



