บทความจาก CodeProject นี้สร้างแรงบันดาลใจให้ฉันจริงๆ
http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx
ดังที่ผู้เขียนกล่าวไว้ เรามักจะใช้โค้ดจำนวนมากที่คล้ายกับโค้ดต่อไปนี้ใน ASP.NET เพื่อตรวจจับอ็อบเจ็กต์ที่เก็บไว้ในเซสชัน เพื่อป้องกันการสูญเสียตัวแปรที่เก็บไว้หลังจากเซสชันหมดอายุ:
Int32 nUserID = -1;
ถ้า ( null != เซสชัน ["userID"] ) {
ถ้า (เซสชัน ["userID"] เป็น Int32) {
ถ้า ( 0 < เซสชัน ["userID"] ) {
nUserID = (Int32) เซสชัน ["userID"]
-
-
-
ถ้า ( -1 == nUserID )
-
โยน ApplicationException ใหม่ ( "สถานการณ์ที่ไม่คาดคิด: ID ผู้ใช้ไม่ถูกต้อง" );
}
this.doSomething( nUserID );
รหัสแบบนี้จะอยู่ทุกที่
ดังนั้นการใช้โซลูชันการห่อหุ้มของเขาสำหรับการปรับโครงสร้างใหม่ทำให้โค้ดง่ายขึ้นและสะอาดขึ้นมาก!
หลังจากการห่อหุ้มแล้ว โค้ดด้านบนต้องการเพียงประโยคเดียวเท่านั้น:
this.doSomething( CCurrentSession.UserID )
จริงๆ แล้วคลาสของเขานั้นเรียบง่ายมาก ดังที่แสดงด้านล่าง:
ใช้ระบบ;
โดยใช้ System.Web;
////////-------------------------------------- -- ----------------------------------
/// พัฒนาโดย M. van Eijkel - ส.ค. 2548
/// [e]: [email protected]
/// [w]: www.vaneijkel.com
เนมสเปซ VanEijkel.Web
-
/***////// <สรุป>
/// คลาส Wrapper สำหรับวัตถุเซสชัน
/// มันรวมศูนย์ตรรกะสำหรับการดึงและตรวจสอบข้อมูลเซสชัน
/// ด้วยการใช้วิธีการเช่นนี้ คุณจะปรับปรุงการป้องกันและการห่อหุ้มโค้ดที่มีอยู่
/// นำเสนอวิธีที่ง่าย ความเสี่ยงต่ำ และจัดการได้ง่ายในการปรับปรุง WebApplication ที่มีอยู่
/// ดังนั้นฉันจึงเรียกมันว่า webRefactoring
/// </สรุป>
CurrentSession คลาสสาธารณะ
-
ค่าคงที่#ค่าคงที่ของภูมิภาค
สตริง const ส่วนตัว sMANDTORY_SESSION_KEY_NOT_FOUND_MSG = "ยกเว้นตัวแปรเซสชัน แต่ไม่มีอยู่จริง Key={0}";
สตริง const ส่วนตัว sMANDORY_SESSION_VALUE_INVALID_NULL = "ไม่มีการยกเว้นค่าเซสชัน null คีย์={0}";
ส่วนตัว const Int32 nUSERID_UNKOWN = -1;
ส่วนตัว const Int32 nUSERID_MINIMUM = 1;
สตริง const ส่วนตัว sUSERID_INVALID = "รหัสผู้ใช้ไม่ถูกต้อง:{0} UserID ควรใหญ่กว่า:{1}";
#endregion
UserID#region UserID
/***////// <สรุป>
/// ส่งกลับ userID เป็น Int32 แทนที่จะเป็นวัตถุ
/// ด้วยวิธีนี้คุณจะได้รับการป้องกันคอมไพเลอร์และการสนับสนุนด้านข่าวกรองที่คุณต้องการ
/// </สรุป>
UserID Int32 แบบคงที่สาธารณะ
-
รับ
-
กลับ (Int32) GetValueOrDefault( eKeys.UserID, nUSERID_UNKOWN );
-
ชุด
-
ถ้า ( nUSERID_MINIMUM >= ค่า )
-
โยน ApplicationException ใหม่ ( String.Format(sUSERID_INVALID, value, nUSERID_MINIMUM ));
-
SetValue(eKeys.UserID, ค่า);
-
-
#endregion
ส่วนตัว: GetValueOrDefault( eKeys eKey, Object oDefaultValue ) #region ส่วนตัว: GetValueOrDefault( eKeys eKey, Object oDefaultValue )
/***////// <สรุป>
/// รับค่าจากวัตถุเซสชัน
/// </สรุป>
/// <param name="eKey"> คีย์เซสชันเพื่อรับค่า</param>
/// <param name="oDefaultValue">ค่าเริ่มต้นที่จะใช้หากไม่มีค่าที่ถูกต้องเก็บไว้</param>
/// <returns>เมื่อค่าเป็นโมฆะหรือไม่มีคีย์
/// ค่าเริ่มต้นที่ระบุจะถูกส่งกลับ
/// มิฉะนั้น ค่าจะถูกส่งกลับ</returns>
วัตถุคงที่ส่วนตัว GetValueOrDefault (eKeys eKey, วัตถุ oDefaultValue)
-
//รับค่า
วัตถุ oValue = GetValue (eKey);
// ไม่พบค่าหรือเป็นโมฆะ?
ถ้า (null == oValue)
-
//ส่งคืนค่าเริ่มต้น
กลับ oDefaultValue;
}
// ทุกอย่างตกลง: คืนค่าเซสชัน
ส่งกลับค่า oValue;
-
#ภูมิภาคสุดท้าย
ส่วนตัว: GetMandatoryValue( eKeys eKey )#ภูมิภาค ส่วนตัว: GetMandatoryValue( eKeys eKey )
/***////// <สรุป>
/// ส่งกลับค่าเซสชันสำหรับคีย์เซสชันที่ต้องมีอยู่
/// หากไม่มีคีย์อยู่ applicationException จะถูกส่งออกไป
/// </สรุป>
/// <param name="eKey"> คีย์เซสชันที่จะส่งคืนค่าเซสชันสำหรับ </param>
/// <returns> ค่าที่ไม่มีค่าว่าง</returns>
วัตถุคงที่ส่วนตัว GetMandatoryValue (eKeys eKey)
-
//รับค่า
วัตถุ oValue = GetValue (eKey);
// ไม่พบคีย์หรือค่าเป็นโมฆะ?
ถ้า(null==oValue)
-
//โยน applicationException เนื่องจากมีข้อผิดพลาดตรรกะของแอปพลิเคชัน (ไม่มี CLR)
โยน ApplicationException ใหม่ ( String.Format( sMANDATORY_SESSION_KEY_NOT_FOUND_MSG, eKey.ToString() ));
}
// ทุกอย่างโอเค: ส่งคืนค่า
ส่งกลับค่า oValue;
-
#ภูมิภาคสุดท้าย
ส่วนตัว: GetValue( eKeys eKey )#ภูมิภาค ส่วนตัว: GetValue( eKeys eKey )
/***////// <สรุป>
/// รับค่าเซสชันจากคีย์ที่ระบุ
/// </สรุป>
/// <param name="eKey">กุญแจสำคัญในการรับค่าจาก</param>
/// <returns>ค่าเซสชันสำหรับคีย์เซสชันที่ระบุ
/// หากไม่มีคีย์ ระบบจะส่งคืนค่าว่าง
/// </ผลตอบแทน>
วัตถุคงที่ส่วนตัว GetValue (eKeys eKey)
-
กลับ HttpContext.Current.Items[ eKey.ToString() ];
-
#endregion
SetMandatoryValue ส่วนตัว ( eKeys eKey, Object oValue )#region SetMandatoryValue ส่วนตัว ( eKeys eKey, Object oValue )
โมฆะคงที่ส่วนตัว SetMandatoryValue (eKeys eKey, Object oValue)
-
ถ้า(null==oValue)
-
โยน ApplicationException ใหม่ ( String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL, eKey.ToString() ) );
-
-
#ภูมิภาคสุดท้าย
SetValue ส่วนตัว ( eKeys eKey, วัตถุ oValue) # ภูมิภาค SetValue ส่วนตัว ( eKeys eKey, วัตถุ oValue)
/***////// <สรุป>
/// เก็บค่าเซสชันที่ระบุไปยังคีย์เซสชันที่ระบุ
/// </สรุป>
/// <param name="eKey">คีย์สำหรับค่าที่จะจัดเก็บไว้ในเซสชัน</param>
/// <param name="oValue">ค่าที่จะจัดเก็บไว้ในเซสชัน</param>
SetValue โมฆะส่วนตัวคงที่ (eKeys eKey, Object oValue)
-
HttpContext.Current.Items[eKey.ToString()] = oValue;
-
#endregion
/**//// <สรุป>
/// รายชื่อสำหรับ
/// </สรุป>
eKeys ส่วนตัว
-
รหัสผู้ใช้
-
-
-