# מערך שיעור: Validation📋 מערך מרצה

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

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

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

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

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הראו POST עם Age=-999 שמתקבל בלי בעיה — "זה תקין?!" |
| שלב 1: הדרך הידנית — if לכל שדה | 15 דקות | כתבו יחד 3-4 בדיקות if, הדגישו את הכפילות אם יש כמה Actions |
| שלב 2: DataAnnotations | 15 דקות | Required/Range/StringLength/EmailAddress — אותם כללים, מוצהרים פעם אחת |
| שלב 3: ModelState.IsValid | 10 דקות | עדיין 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` ידנית שבדרך כלל עוצרת בשגיאה הראשונה.
