لقد ألهمتني هذه المقالة من CodeProject حقًا،
http://www.codeproject.com/useritems/SessionWrapper.asp#xx1208856xx .
كما قال المؤلف، غالبًا ما نستخدم الكثير من التعليمات البرمجية المشابهة لما يلي في ASP.NET لاكتشاف الكائنات المخزنة في الجلسة لمنع فقدان المتغيرات المخزنة بعد انتهاء صلاحية الجلسة:
Int32 nUserID = -1;
إذا (خالية!= جلسة["userID"]) {
إذا (جلسة ["معرف المستخدم"] هي Int32) {
إذا ( 0 < الجلسة["userID"] ) {
nUserID = (Int32) الجلسة["userID"]
}
}
}
إذا ( -1 == nUserID )
{
طرح ApplicationException جديد ("موقف غير متوقع: معرف المستخدم غير صالح.")؛
}
this.doSomething(nUserID);
رمز مثل هذا سيكون في كل مكان.
لذا، فإن استخدام حل التغليف الخاص به لإعادة البناء يجعل الكود أبسط وأنظف كثيرًا!
بعد تغليفه، يحتاج الكود أعلاه إلى جملة واحدة فقط:
this.doSomething( CCurrentSession.UserID )
فئته في الواقع بسيطة جدًا، كما هو موضح أدناه:
باستخدام النظام؛
باستخدام System.Web
/**////------------------------------------- -- --------------------------------------------------
/// تم التطوير بواسطة M. van Eijkel - أغسطس 2005
/// [هـ]: [email protected]
/// [ث]: www.vaneijkel.com
مساحة الاسم VanEijkel.Web
{
/**//// <الملخص>
/// فئة الغلاف لكائن الجلسة.
/// يقوم بتركيز منطق استرداد معلومات الجلسة والتحقق من صحتها.
/// باستخدام أسلوب كهذا، يمكنك تحسين حماية وتغليف التعليمات البرمجية الموجودة.
/// إنه يوفر طريقة بسيطة ومنخفضة المخاطر وسهلة الإدارة لتحسين تطبيق الويب الحالي.
/// لذلك، أسميها webRefactoring.
/// </الملخص>
الطبقة العامة CurrentSession
{
ثوابت# ثوابت المنطقة
Private const String sMANDATORY_SESSION_KEY_NOT_FOUND_MSG = "تم استثناء متغير الجلسة ولكنه غير موجود. المفتاح={0}";
Private const String sMANDATORY_SESSION_VALUE_INVALID_NULL = "لا توجد قيمة جلسة فارغة مستثناة. المفتاح={0}"
;
const الخاص Int32 nUSERID_MINIMUM = 1؛
سلسلة const الخاصة sUSERID_INVALID = "معرف المستخدم غير صالح:{0}. يجب أن يكون معرف المستخدم أكبر من:{1}";
#
معرف مستخدم المنطقة # معرف مستخدم المنطقة
/**//// <الملخص>
/// يُرجع معرف المستخدم كـ Int32 بدلاً من كائن.
/// بهذه الطريقة سوف تحصل على حماية المترجم والدعم الاستخباراتي الذي تحتاجه.
/// </الملخص>
معرف المستخدم Int32 الثابت العام
{
يحصل
{
return (Int32) GetValueOrDefault( eKeys.UserID, nUSERID_UNKOWN );
}
تعيين
{
إذا (nUSERID_MINIMUM >= القيمة)
{
طرح ApplicationException جديد ( String.Format(sUSERID_INVALID, value, nUSERID_MINIMUM ));
}
SetValue(eKeys.UserID, value);
}
}
#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, Object oDefaultValue )
{
// احصل على القيمة
الكائن oValue = GetValue( eKey );
// لم يتم العثور على القيمة أم أنها فارغة؟
إذا (خالية == قيمة o)
{
// إرجاع القيمة الافتراضية
إرجاع oDefaultValue؛
}
// كل شيء على ما يرام: إرجاع قيمة الجلسة
قيمة الإرجاع؛
}
#endregion
خاص: GetMandatoryValue( eKeys eKey )# المنطقة الخاصة: GetMandatoryValue ( eKeys eKey )
/**//// <الملخص>
/// يُرجع قيمة الجلسة لمفتاح الجلسة الذي يجب أن يكون موجودًا.
/// إذا كان المفتاح غير موجود، فسيتم طرح استثناء التطبيق.
/// </الملخص>
/// <param name="eKey"> مفتاح الجلسة لإرجاع قيمة الجلسة </param>
/// <returns> قيمة لا شيء فيها.</returns>
كائن ثابت خاص GetMandatoryValue (eKeys eKey)
{
// احصل على القيمة
كائن oValue = GetValue( eKey );
// لم يتم العثور على المفتاح أو القيمة فارغة؟
إذا (فارغة==oValue)
{
//رمي applicationException لأن خطأ منطق التطبيق الخاص به (لا يوجد CLR)
طرح ApplicationException جديد ( String.Format( sMANDATORY_SESSION_KEY_NOT_FOUND_MSG, eKey.ToString() ));
}
// كل شيء على ما يرام: قيمة الإرجاع
قيمة الإرجاع؛
}
#endregion
خاص: GetValue( eKeys eKey )# المنطقة الخاصة: GetValue( eKeys eKey )
/**//// <الملخص>
/// الحصول على قيمة الجلسة من المفتاح المحدد.
/// </الملخص>
/// <param name="eKey">المفتاح الذي يتم الحصول على القيمة منه</param>
/// <returns>قيمة الجلسة لمفتاح الجلسة المحدد.
/// إذا كان المفتاح غير موجود، فسيتم إرجاع القيمة الخالية.
/// </returns>
كائن ثابت خاص GetValue (eKeys eKey)
{
إرجاع HttpContext.Current.Items[eKey.ToString()];
}
#endregion
Private SetMandatoryValue( eKeys eKey, Object oValue )#region Private SetMandatoryValue( eKeys eKey, Object oValue )
SetMandatoryValue باطل ثابت خاص (eKeys eKey، Object oValue)
{
إذا (فارغة==oValue)
{
طرح ApplicationException جديد( String.Format(sMANDATORY_SESSION_VALUE_INVALID_NULL, eKey.ToString() ) );
}
}
#endregion
Private SetValue( eKeys eKey, Object oValue)#region Private SetValue( eKeys eKey, Object oValue)
/**//// <الملخص>
/// يخزن قيمة الجلسة المحددة في مفتاح الجلسة المحدد.
/// </الملخص>
/// <param name="eKey">مفتاح القيمة المراد تخزينها في الجلسة.</param>
/// <param name="oValue">القيمة المراد تخزينها في الجلسة</param>
SetValue باطلة ثابتة خاصة (eKeys eKey، Object oValue)
{
HttpContext.Current.Items[eKey.ToString()] = oValue;
}
#endregion
/**//// <summary>
/// التعداد ل
/// </الملخص>
المفاتيح الإلكترونية التعدادية الخاصة
{
معرف المستخدم
}
}
}