
CustomersService את פעולות ה-CRUD על לקוחות: קריאה, הוספה, עדכון ומחיקה, ועוד חיפוש לפי אימייל. הקונטקסט נמצא רק בתוך המחלקה הזו, וכל השאר רק קוראים לה.GetAllCustomers מחזירה List<Customer> מ-customers.ToList().GetOneCustomer מקבלת int id ומחזירה Customer? עם סימן שאלה, כי ה-ID עלול לא להתקיים. משתמשים ב-SingleOrDefault.Customer שלם, במיוחד בשירות REST API. הפונקציה עושה db.customers.Add ואחריו db.SaveChanges. ה-ID לא נקלט, כי הדאטה בייס מייצר מספור אוטומטי.Customer וקוראת לגרסה הראשונה. כך לא חוזרים על קוד.Attach על האובייקט, הגדרת db.Entry(customer).State כ-Modified ואז SaveChanges. גם כאן יש שתי גרסאות.Attach יקרוס. לכן עושים Attach רק כש-State הוא Detached. הבדיקה נחוצה כי המחלקה לא שולטת בשימוש בה והקונטקסט שלה חי לאורך זמן.DeleteCustomer מקבלת רק ID. היא קוראת ל-GetOneCustomer, ואם הלקוח null פשוט חוזרת בלי חריגה. אחרת מבצעת Remove ו-SaveChanges.GetCustomerByEmail מחפשת עם SingleOrDefault לקוח שהאימייל שלו שווה לערך שהתקבל.Detached, קריאה ל-GetOneCustomer ואחריה Update על אותו לקוח תגרום לקריסה.הטקסט המלא של הדקות הראשונות בהרצאה «הוספת פעולות CRUD קריאה - הוספה - עדכון - מחיקה» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אז אנחנו בעצם רוצים עכשיו לבנות את הפעילויות הלוגיות שקשורות ל-Customers, ללקוחות, רק בתוך המחלקה Customers Service. במילים אחרות, בשום מקום אחר לא אמור להיות אובייקט הקונטקסט.
אובייקט הקונטקסט עטוף במחלקה שמטפלת בשירותים שקשורים ללקוחות. ואנחנו צריכים להסתכל על כלל האפליקציה, וכל פעילות לוגית שדרושה איפשהו באפליקציה, אנחנו בונים אותה כאן.
אנחנו לא בונים פעילויות לוגיות מבחוץ, מבחוץ אנחנו רק קוראים להם ומשתמשים בהם. בואו נניח שהאפליקציה שלנו רוצה לבצע לפחות קראד על לקוחות, קריאיט, ריד, אפדייט ודיליט.
אז בואו נבנה כאן את כל הקראדים. נתחיל עם תביא לי את כל הלקוחות. בואו נבנה כל דבר כזה, זה פונקציה, פונקציה שמחזירה ליסט של קסטומר, נקרא לה get all customers, לפעמים קוראים לה get customers, אם היא מחזירה את כל הלקוחות אז אני אוהב לקרוא לה get all ופשוט return אני פונה לטיבי הולך לcustomers to list וזה מה שמוחזר.
בואו נבנה פונקציה נוספת שמחזירה לקוח בודד נחזיר customer אחד ויחיד נקרא לזה get one customer ביחיד הפונקציה תקבל int ID ואנחנו רוצים להחזיר את ה-ID יכול להיות שיביאו לי ID שלא קיים כשאני כותב פונקציה אני אף פעם לא אמור לדעת מי קורא לה ואיזה פריט הם הולכים לשלוח לי.
אני אשים פה סימן שאלה כי יכול להיות שהלקוח בכלל לא נמצא. אנחנו פונים ל-customers ובמקום to list בואו נקרא ל-single או default.
יכול להיות שהוא נמצא ויכול להיות שלא. עבור כל customer תחפש לי את זה שה-id שלו שווה למה ששלחו לי לפונקציה. הנה שתי פונקציות שמאפשרות קריאה של מידע read.
בואו נתקדם ונבנה את הפונקציה שמוסיפה public void and customer. אנחנו רוצים לקבל מידע של לקוח ולהוסיף. ועכשיו השאלה הנשאלת, האם אנחנו רוצים לקבל את כל הפריטים השונים שיש ללקוח, שם פרטי, שם משפחה, אימייל, תעודת זהות, וואטאבר, או פשוט לקבל אובייקט קסטומר אחד ויחיד.
אז התשובה היא כזאת, כמעט תמיד אתם רוצים לקבל אובייקט קסטומר. זה דבר נכון מאוד, גם עבור הוספה וגם עבור עדכון. יכול להיות שבמקרים מסוימים אתם תרצו לקבל את הפריטים בצורה בודדת.
זה קודם כל החלטה שלכם. כשאתם בונים שירות ובי כזה, מה שנקרא RESTful Service אולי שמעתם, REST API שנמצא על שרת מרוחק והתפקיד שלו זה לקבל מידע ולהחציל מידע, ככה אנחנו בונים אותו.
יש לזה איזושהי סיבה כי אובייקט לקוח מגיע כאובייקט אחד לבאק-אנד ואז אוטומטית הוא נכנס לזה ולפעמים אתם רוצים לקבל אותם בצורה בודדת של first name last name וכדומה בואו נעשה את שתי השיטות.
אני אתחיל עם first name last name מייל אלה שלושת הנתונים שיש בקסטומר בואו נסתכל רגע ונראה שוב פעם מה יש לנו בלקוח ללקוח יש איידי כאשר אני אם מוסיף לקוח חדש אז אני לא צריך לקבל את ה-ID מהיוזר או משום מקום אחר כי הדאטאבייס מייצר לי אותו.
אם ה-ID היה לדוגמת תעודת זהות, זה היה המפתח הראשי שהייתי רוצה לקבל מהמשתמש אז כמובן שהייתי צריך לקבל אותו גם כן, אני לא אמציא תעודת זהות.
אבל במקרה הזה של הלקוחות הגדרנו ש-ID זה לא תעודת זהות אלא זה מספור אוטומטי רץ, הדאטאבייס מייצר אותו ולכן אני לא מקבל כשמוסיפים. אז הנה ה-FirstName, הנה ה-LastName וה-E-Mail, כמובן שפה הם התחילו בעוד קטנה כי הם משתנים לוקאליים.
ומה שאנחנו רוצים לעשות זה להוסיף אותו. איך אנחנו מוסיפים אותו? אז אנחנו רוצים בעצם לבנות Customer שווה NewCustomer ולתת לו את ה-FirstName, את ה-LastName, את ה-E-Mail בצורה כזאת והנה יש לנו אובייקט קסטומר חדש ועכשיו אנחנו יכולים להוסיף אותו לדאטאבייס.
איך אנחנו מוסיפים קסטומר לדאטאבייס? db.customers.add הנה אובייקט הקסטומר תוסיף אותו לדטאבייס ולא לשכוח db.savechanges כדי לשמור את כל השינויים בואו ניקח את כל זה משכפל נדביק אבל נקרא לפונקציה שמקבלת אובייקט קסטומר אחד ויחיד וזה חוסך לי את זה אז יש לי פה עכשיו שתי העמסות מי שרוצה יכול לשלוח לי את כלל הפריטים בצורה בודדת מי שרוצה יכול לשלוח לי את כל האובייקט אנחנו
כשאנחנו בונים את הסרוויס אנחנו לא יודעים מי ירצה להשתמש במה אתם מחליטים אם אתם רוצים גם לבצע את ההעמסה הנוספת שאגב עכשיו אנחנו יכולים להשתמש בפונקציה הזאת כאן בשביל טיפה לא לחזור על קוד במקום שתי השורות האלה אז קודם כל יש לנו את הפונקציה שמקבלת לקוח ואובייקט קסטומר מלא וזאת שמקבלת פריטים
בודדים פשוט יוצרת אובייקט קסטומר וקוראת לבחור כזה שולחת לו והוא זה שמוסיף הנה יש לנו הוספה אנחנו רוצים לעבור לעדכון בעדכון נעשה כרגע רק את השיטה הזאת אין צורך בשיטה הזאת למרות שאפשר לקחתי את כל אלה ושמתי כאן וקראתי לזה דייט קסטומר אז אנחנו רוצים להגיע לדיבי קסטומרס Attach ולקחת את אובייקט ה-Customer לכאן,
לעשות לו Attach, לאחר מכן אנחנו רוצים להגיע ל-db.entry.customer.state ולהגדיר שהוא