PracticU

מודל שכבות - DAL

בלי כתוביותעם כתוביות
PracticU › קורס ADO.NET - חיבור אתר למסד נתונים › מודל שכבות - DAL
מילון מושגים:
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
תהליך - מופע של תוכנה שרצה בזיכרון, עם הקוד, הנתונים והמשאבים שהוקצו לה על ידי מערכת ההפעלה.
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.

מודל שכבות - DAL
הרצאה זו מציגה מודל שכבות לגישה למסד נתונים: שכבת מסד הנתונים, שכבת הגישה לנתונים (DAL), שכבת הלוגיקה העסקית (Business Logic) ושכבת הממשק (UI). כל שכבה מתמחה בתפקיד אחד.
השלבים העיקריים
1. הפרדת הקוד: קוד האתר צריך לעסוק בממשק בלבד. קוד שקשור למסד הנתונים מועבר לשכבה נפרדת, כדי שמתכנת שעובד על העיצוב לא ייגע בחיבורים, ולמנוע כפילות של קוד החיבור.
2. שכבת הגישה לנתונים (DAL): מחלקה ב-DLL נפרד שמכילה את החיבור, את פתיחתו וסגירתו, ופונקציות כלליות: ExecuteNonQuery להוספה, עדכון ומחיקה, GetTable להחזרת טבלה, ו-UpdateTable לעדכון DataTable קיים בעזרת SqlCommandBuilder.
3. שכבת הלוגיקה העסקית: מחלקות ב-DLL נפרד שמכילות את הפעולות הייעודיות לאפליקציה, כמו AddProduct. מחלקה בסיסית (BaseLogic) חושפת את אובייקט ה-DAL, ומחלקות היורשות ממנה משתמשות בו.
4. הממשק: דפי האתר קוראים רק לפונקציות של הלוגיקה, ולא מכירים חיבורים או פקודות SQL.
5. הפתרון: כל השכבות נמצאות בפתרון Visual Studio אחד. האתר מוסיף הפניה ל-Business Logic, וה-DLL של הלוגיקה מתווסף לתיקיית ה-bin יחד עם ה-DAL.
פקודות והגדרות
הקונסטרקטור של ה-DAL מקבל את מחרוזת החיבור. שכבת הלוגיקה לא מגדירה את המחרוזת בעצמה, אלא קוראת אותה מה-Web.config של האתר, כי ה-DLL רץ בתוך תהליך האתר. בפונקציות של ה-DAL נהוג לבדוק אם החיבור פתוח, ולסגור אותו בלוק finally רק אם פתחנו אותו בעצמנו.
טעויות נפוצות
המרצה הזהיר שחיבור פתוח שלא נסגר אחרי שגיאה גורם לבעיות. הדגמה ב-Debug הראתה את המעבר בין השכבות: הדף קורא ללוגיקה, הלוגיקה בונה Command ומעבירה ל-DAL, וה-DAL מבצע את הפקודה ומחזיר את התוצאה.
שימו לב
ה-DAL כללי ויכול לשמש כל אפליקציה, ואילו הלוגיקה העסקית ספציפית לאתר. לכן פונקציה שלא נדרשת לאפליקציה לא נכתבת בשכבה הזאת.
השיעור הבא בקורס: מודל שכבות - Stored Procedures

פרקי ההרצאה: מודל שכבות - DAL

  1. 00:00

    הכרת מודל השכבות

  2. 01:32

    למה לא לערבב קוד

  3. 03:25

    שכבת ה-Business Logic

  4. 04:27

    שכבת ה-DAL

  5. 06:05

    הפרדה ל-DLL נפרדים

  6. 07:30

    בניית Solution ופרויקטים

  7. 12:00

    בניית מחלקת ה-DAL

  8. 13:52

    פונקציית הוצאה לפועל

תמלול ההרצאה: מודל שכבות - DAL

הטקסט המלא של הדקות הראשונות בהרצאה «מודל שכבות - DAL» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

    אוקיי, בשיעור היום אנחנו הולכים לראות איך באמת נכון בעזרת ADO.NET לפנות לבסיס נתונים. אנחנו הולכים לבנות מערכת שיש לנו אתר אינטרנט ושיש לנו מסד נתונים, אבל אנחנו תכף נראה איך באמת נכון לבנות את כל הארכיטקטורה הכללית, שבעזרתה אנחנו ניגשים למסד הנתונים, מבצעים פעולות או מחזירים מידע ומציגים

  2. 00:26

    אותו באתר. המודל הזה נקרא מודל השכבות, מפני שיש לנו כאן מספר שכבות שונות. מה זה שכבה? שכבה זה אזור מסוים בכל המערכת שמתמחה בביצוע דבר מסוים ויש לנו פה מספר שכבות בואו נראה מה השכבות שבינתיים עבדנו איתן.

  3. 00:46

    מסד הנתונים נחשב שכבה בפני עצמה מפני שיש בו טבלאות ויש בו גם stored procedures שראינו בשיעור הקודם שמאפשרות לכתוב קוד שמתבצע בתוך מסד הנתונים לכן הוא שכבה ראשונה.

  4. 01:01

    אנחנו ניגשנו מאתר האינטרנט למסד הנתונים. אתר האינטרנט נחשב גם כן שכבה בפני עצמו. זאת שכבת צד השרת שיש בה את ה-UI שחוזר ללקוח ולכן גם זאת היא שכבה שהתפקיד שלה זה להתעסק עם ה-UI.

  5. 01:18

    מה שאנחנו עשינו עד היום זה שפתחנו קונקשן מאתר האינטרנט, יצרנו קומנד או SQL Data Adapter, Data Table וביצענו את כל הפעולות ישירות ממסד הנתונים.

  6. 01:30

    כמובן שהפעולות האלה עבדו אבל זה לא היה נכון לבצע את זה. יש שתי סיבות לכך. הסיבה הראשונה הקוד שביצענו מעורבב עם שאר הקוד שקשור ל-UI ויכול להיות שיש מספר מתכנתים שעובדים באתר וגם לצורך תחזוקה זה יהיה יותר נוח להפריד את הקוד הזה.

  7. 01:50

    קוד של האתר אינטרנט צריך להתעסק עם ה-UI בלבד ומינימום התעסקות עם מסד הנתונים. קוד שקשור למסד הנתונים צריך להיות במקום אחר.

  8. 02:00

    הוובסייט רק קורא לו ומבצע את הפעולות דרכו. אם כך הסיבה הראשונה היא לא לערבב בין הקודים שנמצאים ב-UI לבין הקודים שקשורים למסד הנתונים.

  9. 02:12

    סיבה שנייה זה בעצם נגזרת של הסיבה הראשונה שבה אנחנו לא רוצים שמתכנת שמתעסק עם ה-UI בטעות ייגע בקוד שקשור למסד הנתונים וההפך מתכנת שמתעסק עם מסד הנתונים אנחנו לא רוצים שהוא פתאום ייגע בקוד שקשור ל-UI ולכן זה לא היה נכון מבחינתנו לקחת את הקוד הזה שקשור למסד הנתונים ולכתוב אותו באזור של ה-UI.

  10. 02:36

    יש דרך אגב עוד סיבה שהיא קשורה לעובדה ששכפלנו את כל הנתונים האלה שוב ושוב. אנחנו שכפלנו את הקונקשן בין הכפתורים השונים, אנחנו שכפלנו את הקומנד.

  11. 02:46

    אם אנחנו עובדים מסודר במודל שכבות אנחנו לא הולכים לשכפל מידע או קוד. אז בואו נראה איך נכון לעשות את זה. אז אנחנו את הקונקשן הזה לא הולכים לבצע, בואו נוריד אותו, ואנחנו הולכים להוסיף שכבה חדשה שעוד לא ראינו אותה בדוגמאות שעברו.

  12. 03:04

    בואו ניקח את השכבה הזאת, נצייר אותה בצורה כזאת. אתר האינטרנט הולך לקרוא לשכבה הזאת. השכבה הזאת הולכת להיבנות בנפרד מאתר האינטרנט והוא בעצם ניגש אליה.

  13. 03:22

    השכבה הזאת התפקיד שלה זה להחזיק או להכיל את כל הלוגיקה שקשורה לפעילויות שלנו במסד הנתונים. מה זה אומר לוגיקה?

  14. 03:32

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

  15. 03:49

    השכבה הזאת נקראת בשפה המקצועית ביזנס לוג'יק וזה אומר שכבת הלוגיקה ששייכת למסד הנתונים ומכילה לי את הפעילויות הלוגיות שאני מעוניין לבצע על מסד הנתונים.

  16. 04:08

    לכן הוובסייט רוצה נניח להוסיף מוצר חדש, הפעילות הלוגית שמוסיפה מוצר חדש צריכה להיות בתוך הביזנס לוג'יק ואז אתר האינטרנט יכול לקרוא לפונקציה הזאת שנמצאת באזור נפרד.

  17. 04:23

    עכשיו אנחנו צריכים עוד שכבה אחת בין הפעילות הלוגית לבין מסד הנתונים והשכבה הזאת נמצאת בדיוק כאן והשם המקצועי שלה זה DAL. DAL זה קיצור של Data Access Layer.

  18. 04:43

    Layer זה שכבה, Access גישה, Data זה נתונים. השכבה הזאת בעצם מייצגת לי את שכבת הגישה לנתונים. מה זה אומר?

  19. 04:54

    אם אני רוצה לבצע פעילות מסוימת על מסד הנתונים ראינו שאנחנו צריכים בשביל הפעילות הזאת Connection. אם אני רוצה להחזיר מידע אנחנו צריכים Data Adapter.

  20. 05:04

    כל הפעילויות האלה נחשבות לפעילויות מנהלתיות בשביל לשלוח נתונים למסד הנתונים או לקבל מידע בחזרה.

  21. 05:12

    לכן הפעילויות האלה ראינו שאנחנו בעצם כתבנו אותן שוב ושוב ושוב ובשביל לא לחזור על הפעילויות האלה בביזנס לוג'יק אנחנו מוציאים אותן לשכבה נפרדת. הביזנס לוג'יק הולך לקרוא לשכבת הגישה לנתונים לדל והדל הולך להוציא לפועל את הנתונים בתוך מסד הנתונים.

  22. 05:33

    זאת אומרת שיש לנו פה קו שמגיע מהביזנס לוג'יק אל מסד הנתונים. איך אנחנו כותבים את השכבות השונות האלה? מסד הנתונים נכתב בתוך מסד הנתונים כמובן, SQL Server, MySQL או כל מסד נתונים אחר.

  23. 05:53

    הוואבסייט ראינו שזה האתר אינטרנט רגיל ב-asp.net. שתי השכבות האלה, הביזנס לוג'יק והדל, בגדול יש בהן מחלקות, אז הן יכולות להיות מחלקות שנמצאות באתר האינטרנט, אבל צורה יותר מקצועית תהיה להפריד אותן לדיאללים נפרדים, כאשר הביזנס לוג'יק הולך להיות דיאלל נפרד

  24. 06:13

    והדל הולך להיות dll נפרד. מה זה dll? dll זה קובץ בעל סיוע מ-dll שלא מסוגל לרוץ בעצמו.

  25. 06:23

    מה שהוא מכיל בתוכו זה קלאסים, מחלקות ואז ניתן להשתמש במחלקות האלה ממקומות אחרים. זאת אומרת שאם הדל בנוי ב-dll נפרד, הביזנס לוג'יק מסוגל לבנות אובייקט מה-dll הזה ולהשתמש בפונקציות שיש בו.

  26. 06:41

    אם הביזנס לוג'יק הוא dll נפרד אז הוובסייט יהיה מסוגל לבנות אובייקט מהביזנס לוג'יק מה-dll הזה ולהשתמש בפונקציות שיש בו. כך יש לנו הפרדה ממש מושלמת בין הפעילויות שקשורות למסד הנתונים ונכתבות על ידי Store Procedures וטבלאות, הן נמצאות במסד הנתונים, לבין פעילויות שניגשות למסד על ידי

  27. 07:03

    Connection ו-SQL Data Adapter שנמצאות רק בדל, לבין פעילויות שקשורות ללוגית עצמו שאני רוצה להשתמש איתם, כל הפעילויות הלוגיות שאני רוצה להשתמש איתן באתר האינטרנט, הן נמצאות ב-DLL נפרד ב-Business Logic, ל-UI עצמו שנמצא באתר האינטרנט ובעצם זה הטפסים שלי,

  28. 07:25

    זה התיבות הטקסט, לחצנים וכולי והוא רק קורא לפונקציות שנמצאות בביזנס לוג'יק. אוקיי, אז בואו נרים את כל המערכת הזאת.

  29. 07:34

    ראשית, יש לנו כאן שלושה פרויקטים שונים. יש לנו את הפרויקט של הוובסייט, יש לנו את הפרויקט של הביזנס לוג'יק ויש לנו את הפרויקט של הדל.

  30. 07:43

    הפרויקט של הוובסייט זה אתר אינטרנט הרגיל, ובסייט הרגיל. הפרויקט של ה-Business Logic זה DLL, הפרויקט של הדל זה DLL.

  31. 07:51

    יש לנו פה שלושה פרויקטים. אם אנחנו רוצים לבנות מערכת שיש בה יותר מפרויקט אחד וזה בדרך כלל מה שאנחנו נרצה, אז הדבר הנכון לבנות ב-Visual Studio זה לא פרויקט מסוים, אלא הדבר הנכון זה לגשת ל-New Project, ללכת ל-Other Project Types, לבחור ב-Visual Studio Solutions ולבנות סולושן

  32. 08:15

    חדש ריק. קובץ סולושן זה קובץ שמחזיק בתוכו מספר פרויקטים. בואו נכתוב כרגע קובץ סלושן שנקרא לו tiers מודל, מודל השכבות.

  33. 08:32

    נבצע אוקיי וכעת המערכת יוצרת לנו רק סלושן ויש בו אפס פרויקטים, אנחנו יכולים לראות את זה כאן. אחרי שיצרתי סלושן אחד, רק אז כדאי לי להוסיף פרויקטים.

  34. 08:45

    אז בואו נפתח את הסלושן ונוסיף את הפרויקטים השונים. אז ראשית אני רוצה ללכת ל-add ולהוסיף new website, אז אני בוחר asp.net empty website ואני צריך לומר למערכת לשים את האתר אינטרנט בתוך התיקייה של הסלושן שנוצרה לי מקודם.

  35. 09:06

    אז בואו נאתר את התיקייה בבראוז ואנחנו רואים אותה כאן לדסטופ. נפתח בתוך התיקייה הזאת תיקייה עבור האתר שלנו, בואו נקרא לו Northwind Website והוא מתעסק עם אתר האינטרנט Northwind.

  36. 09:24

    מבצע אופן ואוקיי. כעת יש לי בסלושן אתר אינטרנט אחד ויחיד ואפילו אין בו דפים. בואו נלך ונוסיף בו New Item ונגדיר Webform, בואו ניתן לו את השם home page add וכעת יש לנו אתר אינטרנט עם דף אחד ויחיד.

  37. 09:50

    עכשיו אנחנו צריכים לבנות את שתי השכבות האחרות. אז בואו ניגש ל-solution נבצע add וניצור new project. הפרויקט שאנחנו רוצים ליצור זה פרויקט dll וזה מתבצע על ידי פרויקט מסוג class library שזה בעצם dll.

  38. 10:07

    כאן אנחנו רואים שאוטומטית המערכת יודעת לשים את הפרויקט שלנו בתיקייה של ה-solution. מקודם היא לא ידעה בנוגע לאתר האינטרנט כעת היא כן יודעת בנוגע ל-dll.

  39. 10:19

    בסדר, זו התנהגות מסוימת של Visual Studio. ראשית ניצור את פרויקט הדל. אז יש לנו פרויקט dll ונקרא לו data access layer. נבצע אוקיי.

  40. 10:33

    יש לנו כרגע פרויקט dll שנקרא data access layer ויש לו מחלקה אחת. תכף אנחנו נתעסק איתה. הפרויקט הבא שאנחנו רוצים להוסיף זה פרויקט עבור ה-Business Logic.

  41. 10:46

    אז אני הולך ל-Add New Project. שוב פעם אני הולך לבחור ב-Class Library והפעם אני קורא לו Business Logic. נבצע אוקיי ויש לנו כרגע את הפרויקטים המוכנים בשביל העבודה הדבר הראשון שאנחנו נתחיל לעבוד איתו זה עם הדל אז יש לנו פה פרויקט שנקרא data access layer הוא

  42. 11:09

    מסוג dll ואנחנו רוצים לקרוא למחלקה שלנו דל קיצור של data access layer visual studio שואלת אותי כרגע האם אני מעוניין גם לשנות את שם המחלקה קלאס אחד לדל ואני אומר לה yes היא לא שינתה לי בואו נשנה אותו בעצמנו אוקיי מה יש לי בדל בדל אני צריך שיהיה לי את הרכיבים השונים שיאפשרו גישה למסד הנתונים בלבד.

  43. 11:43

    הרכיב שראינו שניגש למסד הנתונים זה sql connection. אז יש לי פה private sql connection בצורה כזאת. רכיב נוסף שאני אצטרך זה רכיב מסוג data adapter אנחנו תכף נגדיר אותו.

  44. 12:14

    קודם כל אני רוצה לאפשר למי שרוצה לפנות למסד הנתונים לתת לי connection string ולכן אבנה קונסטרקטור פונקציה שמופעלת אוטומטית ביצירת אובייקט שתקבל את ה-ConnectionString.

  45. 12:33

    הפונקציה הזאת ניגשת ל-Connection ומכניסה לתוכו את ה-ConnectionString. הדבר הבא שאנחנו צריכים במחלקת הדל זה אפשרות שמי שמשתמש בה, כלומר ביזנס לוג'יק, יוכל לפתוח קונקשן, לבצע פקודה ולסגור קונקשן והוא יוכל לעשות את זה בעצמו.

  46. 12:55

    לכן יש לנו פה פונקציה public void open שהתפקיד שלה זה סך הכל קון נקודה open. בנוסף יש לנו פה public void close שהתפקיד שלה זה con.close והיא רק סוגרת לי את הקונקשן.

  47. 13:17

    כעת אנחנו יכולים לבנות פונקציה שהולכת לקבל מבחוץ, כלומר מהביזנס לוג'יק sql command ולהוציא אותו לפועל. בגלל שיש שוני בין הפעילויות השונות של הקומנד בואו נפריד את זה לכמה פונקציות.

  48. 13:31

    ראשית בואו נבנה פונקציה שמסוגלת להוציא לפועל שאילתות insert, update ו-delete. אז יש לנו פה public void, insert, Update delete מקבלת sql command והתפקיד שלה זה להוציא לפועל את הפקודה בקומנד.

  49. 14:00

    אז איך היא עושה את זה? ראשית הקומנד צריך להכיר את הקונקשן. command.connection=object.connection שנית אנחנו צריכים לבדוק האם הקונקשן פתוח או לא. כלומר המשתמש יכול לפתוח בעצמו את הקונקשן ואז הוא אחראי לסגור אותו.

  50. 14:24

    יש חוק בעולם הפיתוח מי שפותח דבר מה הוא זה שצריך לסגור אותו. זה לא הגיוני שבן אדם א' יפתח משהו ובן אדם ב' יסגור. כי יכול להיות שבן אדם א' פתח והוא בעצמו רוצה לבצע כמה פקודות ולכן הוא צריך לסגור.

  51. 14:39

    לכן מה שאני צריך לעשות זה לבדוק האם הcon.state מצב ה-connection זה open. אם מצב ה-connection הוא open אז בעצם אני

לקורס המלא: קורס ADO.NET אונליין

ההרצאה הקודמת: קריאה ל-Stored Procedure

ההרצאה הבאה: מודל שכבות - Stored Procedures

הרצאות קשורות מקורסים אחרים

  • מודל שכבות
  • מודל OSI - שבע שכבות
  • בניית מודל
  • יצירת מודל - Product Model

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס תכנות מתקדם - #Advanced .NET C
  • קורס WCF - תקשורת למתקדמים בדוט-נט