DCSIMG
Session Manager - שלמה גולדברג (הרב דוטנט)
Sign in | Join | Help

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

Session Manager

פורסם בתאריך Dec 20 2009, 02:05 PM על ידי Shlomo | ישנם 3 תגובות

 

אחד מהדברים שאני לא אוהב בעבודה עם Session זה העובדה שאחנו עובדים איתו עם מחרוזות.
בפרוייקטים בינוניים פתאום מתחילים לשכוח עם איזה שם השתמשנו והאם השתמשנו בשם מסויים, והעניינים מתחילים להסתבך.
 
ידיד יקר שי קרן כתב class בשם SessionManager שפותר את הבעיות האלו, מכיוון שהשימוש ב - Session הוא בעזרת enum.
 
אפשר להוריד את הקוד מכאן (אני משתמש בו כבר שנתיים בכל הפרוייקטים שלי)
 
 
זה עובד בצורה הבאה. (אני מציג כאן רק חלק מהקוד - הקוד המלא ניתן להורדה מהלינק למעלה)
 
יש enum עם כל השמות שנרצה להשתמש ב - Session (בכל פעם שנרצה להוסיך משהו חדש - נוסיף תחילה ל - enum)
 

public enum SessionParam

{

    User,

    Entities,

    LastException,

    Info

}

 
המחלקה SessionManager ממומשת עם Singelton
 

public sealed class SessionManager

{

    public static SessionManager Session

    {

        get

        {

            if (m_Instance == null)

            {

                lock (m_ObjLocker)

                {

                    if (m_Instance == null)

                    {

                        m_Instance = new SessionManager();

                    }

                }

            }

            return m_Instance;

        }

    }

 
 
בנוסף יש לו שני indexers
 

public object this[SessionParam sessionParam]

public object this[string name]

 
יש גם עם string עבור מצבים שאין ברירה אלא לעבוד עם מחרוזת ואי אפשר להגדיר מראש.
 
 
כעת העבודה מול ה - Session תהיה כך
 
 

SessionManager.Session[SessionParam.LoginUser] = new User();

 
 
מה שיגרום לכך - שנוכל לעשות Find All Reference על מופע של enum ולמצוא איפה משתמשים בזה מבלי לעשות חיפושים על מחרוזות.
 
תהנו

רשימת תגובות

# re: Session Manager

פורסם בתאריך Sunday, December 20, 2009 4:06 PM על ידי Ran Wahle  

ניתן אפילו לעבות את ההגנה על משתני ה - Session ולנוסיף לה גם Type safety .

זאת ע"י שימוש ב Properties  בתוך ה - SessionManager class  ובתוכן לבצע את ההשמה למשתני ה - Session השונים.

כך - במדה ואנו רוצים לעבוד מול ה - SessionManager נוכל לפנות אליו כך לדוגמא:

SessionManger.Session.CurrentUser = new User

# Session manager

פורסם בתאריך Sunday, December 20, 2009 5:51 PM על ידי Ran Wahle's blog  

his post comes as an extension to a post by Shlomo Goldberg (in Hebrew) that talks about how to work with session variable in a safer way than plain strings.

# re: Session Manager

פורסם בתאריך Monday, December 21, 2009 12:08 PM על ידי Moshe L  

הפקודה lock פה מיותרת מכיוון שבמילא ה-Session נעול עבור  הדף הרלוונטי (אלא אם כן הוא רק Read וא זאין לזה משמעות).

אם לוקחים את השיטה שלך צעד קדימה בשביל Application ו-Cache, דברים נהיים משמעותיים יותר ואז אפשר לנקוט בשיטה דומה לזו שהשתמשתי בה כאן:

blogs.microsoft.co.il/.../cache.aspx

שלח תגובה

(שדה חובה) 
(שדה חובה) 
(אופציונלי)
(שדה חובה) 

Enter the numbers above: