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

session

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
  {
   /**//// <summary>
   /// 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.
   /// </summary>
   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
   /**//// <summary>
   /// Returns the userID as a Int32 instead of an object.
   /// This way you will get the compiler protection and intelligence support you need.
   /// </summary>
   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
  
   private: GetValueOrDefault( eKeys eKey, Object oDefaultValue )#region private: GetValueOrDefault( eKeys eKey, Object oDefaultValue )
   /**//// <summary>
   /// Gets the value from the session object.
   /// </summary>
   /// <param name="eKey"> The session key to get the value for.</param>
   /// <param name="oDefaultValue">The default value to use if no valid value stored.</param>
   /// <returns>When the value is null or the key does not exist,
   /// the specified default value is returned.
   /// Otherwise, the value is returned</returns>
   private static object GetValueOrDefault( eKeys eKey, Object oDefaultValue )
   {
   //get the value
   object oValue = GetValue( eKey );
  
   //value not found or null?
   if (null == oValue)
   {
   //return default value
   return oDefaultValue;
   }
  
   //everything oke: return session value
   return oValue;
   }
   #endregion
   private: GetMandatoryValue( eKeys eKey )#region private: GetMandatoryValue( eKeys eKey )
   /**//// <summary>
   /// Returns the session value for a session-key that must exist.
   /// If the key does not exist an applicationException is thrown.
   /// </summary>
   /// <param name="eKey"> The session-key to return the session-value for. </param>
   /// <returns> A none-null value.</returns>
   private static object GetMandatoryValue( eKeys eKey )
   {
   //get the value
   object oValue = GetValue( eKey );
  
   //key not found or value null?
   if ( null == oValue )
   {
   //throw applicationException because its application logic error (none CLR)
   throw new ApplicationException ( String.Format( sMANDATORY_SESSION_KEY_NOT_FOUND_MSG, eKey.ToString() ));
   }
  
   //everything oke: return value
   return oValue;
   }
   #endregion
   private: GetValue( eKeys eKey )#region private: GetValue( eKeys eKey )
   /**//// <summary>
   /// Gets the session value from the specified key.
   /// </summary>
   /// <param name="eKey">The key to get the value from</param>
   /// <returns>The session value for the specified session key.
   /// If the key does not exist, null is returned.
   /// </returns>
   private static object GetValue( eKeys eKey )
   {
   return HttpContext.Current.Items[ eKey.ToString() ];
   }
   #endregion
  
   private SetMandatoryValue( eKeys eKey, Object oValue )#region private SetMandatoryValue( eKeys eKey, Object oValue )
   private static void SetMandatoryValue( eKeys eKey, Object oValue )
   {
   if ( null == oValue )
   {
   throw new ApplicationException( String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL, eKey.ToString() ) );
   }
   }
   #endregion
   private SetValue( eKeys eKey, Object oValue)#region private SetValue( eKeys eKey, Object oValue)
   /**//// <summary>
   /// Stores the specified session-value to the specified session-key.
   /// </summary>
   /// <param name="eKey">The key for the value to store in the session.</param>
   /// <param name="oValue">The value to store in the session</param>
   private static void SetValue ( eKeys eKey, Object oValue)
   {
   HttpContext.Current.Items[eKey.ToString()] = oValue;
   }
   #endregion
  
   /**//// <summary>
   /// An enum for the
   /// </summary>
   private enum eKeys
   {
   UserID
   }
   }
  }

时间: 2025-01-14 17:53:31

重构Session确实让代码简洁干净了不少的相关文章

[ASP.NET]重构Session确实让代码简洁干净了不少

asp.net|session 诚如作者所说,我们经常在ASP.NET用许多类似于下面的代码来检测Session中存储的对象,来防止Session过期后存储的变量丢失问题:Int32 nUserID = -1;if ( null != Session["userID"] ) {  if ( Session["userID"] is Int32 ) {    if ( 0 < Session["userID"] ) {      nUserI

网页教学网代码分享:干净简洁的网页列表代码

文章简介:网页教学网代码分享:干净简洁的网页列表代码.  谁不希望有一个好看而又干净的网页列表?这篇文章中我们给出几个实用的例子,你可以把他们直接用到自己的工作中. 我们从一个带有动画效果的垂直列表开始,接着是一个图文混排的例子,然后是一个只有图片的list例子跟一个水平菜单的例子,最后是一个以放大数字开头的列表.对于初学者而言这里可以学到很多东西,对于熟手,直接拿来用就是了. 1.helvetica字体的列表 第一个例子的样式看起平淡无奇,不过喜欢简约风格的人也许会感兴趣,这类似于印刷字体风格

PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用_php技巧

思维导图 介绍 前几篇系列文章,我比较关注的是<PHP 杂谈<重构-改善既有代码的设计>之一 重新组织你的函数>,但是我觉得我还是没有说清楚,我自己也有很多不理解的地方,而且这篇是我的第一篇这方面的文章,有很多的纰漏,所以我会经常性的去做修改,如果大家有好的意见不妨告知一.二. 今天谈得是"接口",此接口非"Interface",而是一个统称.我们一般可以把供别人使用的函数或者url(一般是用于提供数据)叫接口.--可能还有别的意思,毕竟我现

《重构—改善既有代码设计》——第二章重构原则——学习笔记

1:什么是重构? 重构是一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序内部结构.本质上说,重构就是[在代码写好之后改进它的设计]   2:为什么要对项目进行重构呢?重构对软件开发有什么好处,   为什么要重构呢,打个贴切的比方:我平时比较 懒散,屋子里面的东西都是随手乱放,时间长了,屋子里面就乱七八糟了.有时候到了自己也忍无可忍的时候,我就要大动干戈了,把该放哪儿的东西都整理到哪 儿,该扔掉的东西全部扔掉.一个项目也是如此,有时候可能是设计不到位:有时候可能是经过多人的修改,

技巧小结:如何让 CSS 代码简洁而易于编写?

css|技巧 如何让 CSS 代码简洁而易于编写?这恐怕是许多开发者都关心的问题.我想,大概没有什么魔法,可以保证一下就把你的样式表缩小到百分之多少,但合理的 CSS 编码与组织技巧,的确能够帮助你的更有效率地写出更清晰高效的代码,自然,样式表大小的缩减还能减少下载的时间. 组织你的样式表 尽管我们有种种 CSS 的开发工具,比如 TopStyle,比如 StyleMaster,它们可以让你对当前这个样式表里面定义了哪些规则,涉及哪些 class,哪些 ID 一目了然,但这不等于说你的样式表就组

PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据_php技巧

思维导图 介绍    承接上文的PHP 杂谈<重构-改善既有代码的设计>之 重新组织你的函数继续重构方面的内容.   这章主要针对数据的重构.   1.争论的声音--直接访问Field还是通过函数(Accessor)访问Field  2.修改Array为Object:当你看到一个Array很像一个数据结构,你可以使用Replace Array with Object,把Array变成一个对象.--数据结构更清晰.      专业术语   accessor:访问者,存储器--在本文翻译为&quo

用JavaScript实现一个代码简洁、逻辑不复杂的多级树_javascript技巧

在网上找个很多的树实现,总感觉不尽如意,不是需要引用JS外部文件使用插件,就是代码过多让人看的眼花,实际上我只是想实现一个代码简洁.逻辑不复杂的树,费话不多说直接上代码: 1,首先写CSS样式,这个必需要写的头部最先渲染 复制代码 代码如下: <style> .ps{margin-left:10px;display:none;} .f { background: url("add.gif") no-repeat scroll -4px -21px; cursor: poin

重构真的能提高代码质量吗?

  与传统观点相反,新的研究发现,想要为了更高效和更具可维护性,而去重组软件代码,我们所花的时间和精力并不一定是值得的. 重构软件,也就是,重组现有的源代码,以使其更高效,更具可读性和可维护性,这可能是所有开发人员时不时在做的一件事情.当然,重构背后隐含的假设 是,将来的收益--可节省的人力物力,要能大于现在投入的成本--所耗费的时间和努力.然而,新的实验研究表明,情况可能并不像你想像得那样美好,重构或 许并不能大幅度地改善软件代码质量,有时候甚至是完全没有起到一点改善作用. 此研究是由研究人员

谷歌新首页简洁干净 却可能面临司法纷争

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 北京时间5月31日消息,据国外媒体报道,谷歌简洁干净的首页可能将令其陷入司法纷争. 谷歌的两位创始人佩奇和布林为保持"干净的"谷歌首页而作出了虔信宗教般的努力,但却可能因此触犯了加州的一项隐私权法,原因是他们拒绝在首页上加入"隐私权"链接. 同业公会坚持认为谷歌应在首页上加入上述链接,谷歌已经拒绝了这一