上一篇 | 下一篇

重构Session确实让代码简洁干净了不少

发布: 2008-6-29 22:17 | 作者: admin | 来源: | 查看: 0次

>

CodeProject的这篇文章确实对我有所启迪,

http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx。

诚如作者所说,我们经常在ASP.NET用许多类似于下面的代码来检测Session中存储的对象,来防止Session过期后存储的变量丢失问题:

Int32 nUserID = -1;

if ( null != Session["userID"] ) {

if ( Session["userID"] is Int32 ) {

if ( 0 < Session["userID"] ) {

nUserID = (Int32) Session["userID"]

}

}

}

if ( -1 == nUserID )

{

throw new ApplicationException ( "Unexpected situation: userID invalid." );

}

this.doSomething( nUserID );

这样的代码会遍布各处。

那么,利用他的这个封装方案来做重构,确实让代码简洁干净了不少!

经过他的封装,上面的代码用这么一句话就行了:

this.doSomething( CCurrentSession.UserID )

他的类其实也很简单,如下所示:

using System;

using System.Web;

/**////--------------------------------------------------------------------

/// Developed by M. van Eijkel - aug 2005

/// [e]: marcelvaneijkel@gmail.com

/// [w]: www.vaneijkel.com

namespace VanEijkel.Web

{

/**////

/// Wrapper class for the session object.

/// It centralizes the logic for retrieving and validation of session information.

/// By using an approach like this you improve the protection and encapsulation of existing code.

/// It offers a simple, low-risk, easy manageable way to improve existing WebApplication.

/// Therfore, I call it webRefactoring.

///

public class CurrentSession

{

Constants#region Constants

private const String sMANDATORY_SESSION_KEY_NOT_FOUND_MSG = "Session variable excepted but does not exist. Key={0}";

private const String sMANDATORY_SESSION_VALUE_INVALID_NULL = "None null session value excepted. Key={0}";

private const Int32 nUSERID_UNKOWN = -1;

private const Int32 nUSERID_MINIMUM = 1;

private const String sUSERID_INVALID = "Invalid UserID:{0}. UserID should be larger than:{1}";

#endregion

UserID#region UserID

/**////

/// Returns the userID as a Int32 instead of an object.

/// This way you will get the compiler protection and intelligence support you need.

///

public static Int32 UserID

{

get

{

return (Int32) GetValueOrDefault( eKeys.UserID, nUSERID_UNKOWN );

}

set

{

if ( nUSERID_MINIMUM >= value )

{

throw new ApplicationException ( String.Format(sUSERID_INVALID, value, nUSERID_MINIMUM ));

}

SetValue( eKeys.UserID, value );

}

}

#endregion

字号: | 推荐给好友

31/3123>

评分:0

我来说两句