שאלה:
לא נראה לי שכאן מתאים להשתמש בפקד ה-Menu של ASP.Net 2.0.
את כל מבנה התפריטים אני שומר ב-DB מה שמכריח אותי בזמן ריצה ליצור "ידנית" Menu Nodes על פי ערכים מה-DB.
תשובה:
להפך, זה בדיוק המצב שלשמו נבנה ASP.Net 2.0.
אחת מהבשורות הגדולות של ASP.Net 2.0 היא מה שנקרא מודל ה-Providers.
הרעיון אומר ככה "אנחנו נספק לכם אפשרויות ברירת מחדל למקורות מידע של בעיות נפוצות ואתם תוכלו להחליף אותם אם תצטרכו".
למשל, זיהוי משתמשים (Membership), תפקידים (Roles), מידע עסקי על משתמשים (Profiles), קיסטום של WebParts ע"י משתמשים ופירוט מבנה האתר (SiteMap).
לכל אחד מאלו ולמספר נוספים יש Provider.
מה זה ה-Provider הזה? זה סט של פונקציות שמייצגות פעולות שצריך לעשות ביחס למקור מידע.
למשל, MembershipProvider שאחראי על משתמשים נותן מתודות לקבל רשימת משתמשים, להוסיף משתמש חדש, לבדוק שם משתמש וסיסמה, למחוק משתמש, לאפס סיסמה וכך הלאה. עצם העובדה שרשימת הדרישות לא תלויה במימוש, אומר שאפשר להחליף בין מקורות מידע. כברירת מחדל בנושא ה-Membership יש SqlServerMembershipProvider שממש את הפונקצוית האלו ביחס לסיקוול סרבר 2005. אם נרצה נוכל לממש MembershipProvider שמבוסס על מכונת מספרים אקראית שתדחה באופן אקראי את אימות המשתמשים שלא ירגישו בנוח מדי (או אם נרצה לעשות משהו פרודקטיבי נוכל לבסס Membership Provider על mySql, אקסס, קבצי XML או מצב הלבנה).
כנ"ל תקף ל-SiteMapProvdier כברירת מחד משתמשים ב-XmlSiteMapProvider שמבוסס על קריאת פורמט קבצי SiteMap אחיד.
אפשר לראות את הפירוט הזה בקובץ ה-web.config של הפריימוורק.
כלומר, זה ה-Provider הברירת מחדל שיהיה זמין בכל אפליקציה על המכונה (ובכלל בכל מכונה שמותקן בה דוט נט).
אם נרצה, נוכל ליצור SiteMapProvider מבוסס על מסד נתונים סיקוול סרבר וברמת האפליקציה להחליף בקובץ ה-web.config אותו להיות הברירת מחדל לאפליקציה.
למזלנו, לא נצטרך לממש בעצמנו את ה-SqlSiteMapProvider היות וגם מימשו דוגמה שלו ב-2005 MSDN Magezine.
עכשיו בגלל שהנתונים עצמם נשמרים במסד נתונים נוכל לעבוד מולם כרגיל ולהוסיף, למחוק ולערוך נתונים כמו שהיינו עושים עם כל מסד נתונים.
לסיכום, נשאיר אותכם עם הדיאגרמה הבאה שמדגימה בצורה גרפית את מודל ה-Providerים:
בחלק העליון נוכל לראות את ה-Providerים האבסטרקטיים, (למשל SiteMapProvider)
בפס האמצעי נוכל לראות את המימוש הספציפי שלהם בדוט נט, (למשל, XmlSiteMapProvider שראינו)
ובחלק התחתון נוכל לראות את מקורות המידע עצמם (מסדי נתונים ו-XML).
הנה סרטון המדגים איך להשתמש ב-Membership Provider הברירת מחדל מבוסס הסיקוול.
How Do I: Set Up the SQL Membership Provider
למעבר כללי על מודל ה-Providerים:
MSDN Architecture Webcast: Extending and Adding Flexibility to ASP.NET 2.0 Using the Provider Model (Level 200)
קישור: http://www.tapuz.co.il/tapuzforum/main/Viewmsg.asp?forum=831&msgid=102140989