
CustomersService.CustomersService. לא Customer, כי זה לא לקוח בודד, ולא Customers, כי זה לא אוסף. זה שירות שמטפל בכלל הלקוחות. אפשר גם Customers Logic, אבל היום מקובל Service.private readonly של הקונטקסט עם קו תחתון בתחילת השם, ויוצרים אותו עם new.using קרא ל-Dispose ועטף אותו ב-finally. על שדה ברמת המחלקה אי אפשר להשתמש ב-using.IDisposable, ובפונקציית Dispose קוראת ל-db.Dispose. מי שמשתמש במחלקה יכול להפעיל עליה using, וזה תמיד הנוהל ב-C#.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת מחלקת Customers Service» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אחרי שראינו מגוון דברים שאנחנו יכולים לבצע עם Entity Framework Core ועם דאטאבייס, אנחנו רוצים לראות משהו שקשור יותר לארכיטקטורה. אנחנו ראינו איך לבצע מגוון פעולות, קריאת מידע, כתיבת מידע, עדכון, מחיקה, Stop Procedures, Views, אבל למעשה כל הקוד שכתבנו, או רוב הקוד שכתבנו, כתבנו אותו פה במחלקה פרוגרם.
וזה כמובן לא משהו שקורה במציאות. למה עשינו את זה? כמובן בשביל לראות את הנפשות הפועלות ואיך אנחנו יכולים לבחור מידע ולהוסיף מידע ולעדכן ולמחוק ואת כל הדברים בעצם.
איפה באמת אנחנו רוצים לבנות או לכתוב את הפעילות הלוגית? איפה אנחנו באמת רוצים לפתוח את אובייקט הקונטקסט, את ה-DB ולבצע את הפעולות?
אז למעשה המקום היחידי שבו אנחנו רוצים להתעסק עם הקונטקסט ולבצע את הפעולות הלוגיות עצמן, זה באזור במערכת שנקרא Services, שירותים. לפעמים קוראים לזה Business Logic, הלוגיקה העסקית של האפליקציה.
זה מה שאנחנו רוצים לראות בסדרת סרטונים הזו, בנושא הזה. אנחנו רוצים קודם כל לפתוח תיקייה Services. כל אזור בדאטאבייס שיש לנו אנחנו רוצים לבנות מחלקה שמטפלת באזור הזה.
אם אני מסתכל על הדאטאבייס ואני רואה שיש לי אזור של מתנות אז תהיה לי מחלקה שתטפל במתנות והיא תאפשר לקרוא מתנות ולכתוב מתנות ולחפש מתנות ואם אני רואה שיש לי אזור של לקוחות אז תהיה לי מחלקה שמטפלת בלקוחות ותוכל לקרוא לקוחות ולהוסיף לקוח ולעדכן לקוח.
כל הפעילויות הלוגיות שקשורות לאזורים האלה. יש לנו פה טבלה בשם Age Groups, אבל ב-Age Groups אין לנו כל כך פעילויות. היוזר לא הולך להוסיף Age Group חדש. זה בעצם טבלה שהיא מאוד ספציפית, היא סופית.
מי שבנה את הדאטאבייס בנה אותה פעם אחת, ראינו איזה רשומות שנבנו על ידי סיד. אני לא רוצה ללכת ולעדכן מהאפליקציה או למחוק או להוסיף, אייג' גרופ חדש. הטבלה הזאת לא הולכת להיות מיוצגת על ידי מחלקה שמטפלת בה כי אין לנו כל כך מה לטפל בזה.
אם אני רוצה סתם לקרוא ולהציג ליוזר את האזורים השונים אז אני יכול לפתוח איזה מחלקה אבל אפשר להגדיר שזה נמצא במתנות. זאת אומרת שכל הנושא הזה של מחלקה שמטפלת בפעילות לוגית יכולה להיות טבלה אחת או יותר שקשורות לאותה מערכת.
אז אפשר להגיד שאייג' גרופס קשור למתנות אז שני החבר'ה האלה יהיו במחלקה ייעודית של לוגיקה לגבי מתנות. לקוחות זה לא משהו שקשור למתנות, אז תהיה לי מחלקה נפרדת שמטפלת בלקוחות.
בואו נבנה מחלקה שהתפקיד שלה זה לטפל בלקוחות, זה משהו שעוד לא באמת עשינו, אז נראה איך אנחנו כותבים את זה כמו שצריך באזור לוגי נפרד.
נקרא לה Customers Service, שירות שמטפל בלקוחות. שימו לב, אני לא קורא לה Customer, כי זה לא לקוח, אני לא קורא לה Customers כי זה לא לקוחות, זה לא קולקשן של לקוחות, אני קורא לה Customers Service כי זה שירות שמטפל בכלל הלקוחות, וזה השם הנכון.
אפשר לפעמים לקרוא לה Customers Logic או Business Logic, אבל היום מקובל לקרוא לזה Customers Service, שירות בנוגע לכלל הלקוחות.
בואו ניפטר מזה. מה אנחנו בעצם רוצים שיהיה לנו כאן? הדבר הראשון שאנחנו רוצים זה את אובייקט הקונטקסט. בגלל שיש לנו פה סדרה של פונקציות שמתעסקות עם הדאטאבייס, אובייקט הקונטקסט עובר להיות באזור הגלובלי.
private read-only, אני לא הולך לשנות אותו. gift shop context, זה ה-db שלנו, בגלל שהוא משתנה פרטי נהוג ב-c-sharp לפחות להתחיל אותו בכף תחתון, שווה new.
אם אנחנו מסתכלים על איך השתמשנו עם הקונטקסט פה בכל הפונקציות אנחנו רואים שעשינו פה את פקודת ה-using ואם תזכרו הפקודה הזאת כל מה שהיא אומרת זה ברגע שהקוד הנוכחי של הפונקציה הנוכחית מסתיים c-sharp אוטומטית בסוף בסוף פה קוראת ל-db.dispose ומשחררת את
כלל המשאבים שהאובייקט הזה יצר והוא יוצר משאבים הוא צריך לייצר כל מיני דברים שקשורים לדאטאבייס ולא רק זה שהיא קוראת לזה ב-dispose גם היא עוטפת את הקריאה ב-finally ככה שבכל מקרה היא תתבצע, גם אם התוכנית תקרוס עדיין יהיה לי שחרור משאבים, ראינו את זה באחד הסרטונים בעבר.
האם אני יכול כאן להגדיר איפשהו פה using כך שאם אני אפסיק להשתמש באובייקט הזה בתוך המחלקה אז המערכת תשחרר את המשאבים? אז אני רואה שהוא לא נתן לי לעשות את זה פה והוא לא נתן לי לעשות את זה פה והוא בטח לא ייתן לי לעשות את זה פה.
אנחנו לא יכולים להפעיל using בצורה כזאת על משתנה שמוגדר כdata member ברמת הקלאס, שדה ברמת המחלקה. מה אנחנו כן תמיד רוצים לעשות? אם אנחנו בונים קלאס שמשתמשת באיזשהו data member שיש לו dispose, וראינו שלDB הזה יש dispose, אם אנחנו מסתכלים אנחנו רואים שהוא disposable, אז אנחנו תמיד תמיד נממש במחלקה שלנו אינטרפייס
שנקרא iDisposable,