משך: 1.5 שעות אקדמיות (68 דקות).

מטרת השיעור: הסטודנטים ישתמשו ב-DataAnnotations ו-[ApiController] לוולידציה אוטומטית, במקום בדיקות ידניות.

בסוף השיעור הסטודנטים צריכים: להוסיף DataAnnotations למודל, להסביר איך [ApiController] מפעיל ולידציה אוטומטית, ולזהות מגבלות DataAnnotations (ולידציה תלוית-כמה-שדות).

דגש קריטי: הראו קודם מודל בלי ולידציה שמקבל נתונים לא-הגיוניים (גיל שלילי) — זו הבעיה הקונקרטית שמצדיקה את השיעור.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהראו POST עם Age=-999 שמתקבל בלי בעיה — “זה תקין?!”
שלב 1: הדרך הידנית — if לכל שדה15 דקותכתבו יחד 3-4 בדיקות if, הדגישו את הכפילות אם יש כמה Actions
שלב 2: DataAnnotations15 דקותRequired/Range/StringLength/EmailAddress — אותם כללים, מוצהרים פעם אחת
שלב 3: ModelState.IsValid10 דקותעדיין if אחד, אבל רק אחד — לא אחד לכל שדה
שלב 4: [ApiController] אוטומטי15 דקותהראו 400 אוטומטי בלי אף if — גם ה-if האחד נעלם
תרגול מודרך8 דקותתרגיל 1+2

דגשים להעברת השיעור

  • ההדגמה הפותחת (Age = -999 מתקבל בלי בעיה) חייבת להיות אמיתית ומורצת בפועל — לא רק תיאור.
  • קשרו DataAnnotations בבירור לגישה ה"הצהרתית" שכבר פגשו (enum ביחידת היסודות) — “אתם מצהירים מה מותר, לא בודקים ידנית”.
  • ציינו בקצרה (בלי להעמיק) שולידציה תלויית-כמה-שדות דורשת גישה שונה — כדי לא ליצור רושם ש-DataAnnotations פותרות הכל.

מושגים

Model Binding — המרת JSON נכנס לאובייקט C# אוטומטית. DataAnnotations — attributes הצהרתיים לכללי תקינות. [ApiController] — מפעיל ולידציה אוטומטית, מחזיר 400 בעצמו.


תרגיל חשיבה

שאלת פתיחה: “אם הייתם צריכים לבדוק ידנית (בלי DataAnnotations) שכל שדה במודל Student תקין — כמה שורות if הייתם צריכים, וכמה קל לשכוח שדה אחד?”

מהלך: תנו לסטודנטים לחשב — מודל עם 5 שדות דורש לפחות 5 בדיקות if נפרדות, כל אחת עם ניסוח הודעת שגיאה משלה. הובילו לתובנה: DataAnnotations לא רק מקצרות קוד — הן מקטינות סיכוי לשכוח בדיקה, כי הכלל יושב ישירות ליד השדה שהוא מגן עליו, לא במקום נפרד שקל לפספס.

מה המרצה מראה בסוף: הריצו POST עם כמה שדות לא-תקינים בו-זמנית (שם ריק וגם גיל שלילי) — הראו שה-400 שמוחזר אוטומטית מכיל את כל השגיאות יחד, לא רק הראשונה שנתקלו בה — יתרון נוסף על בדיקת if ידנית שבדרך כלל עוצרת בשגיאה הראשונה.