On this page
מערך שיעור: 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 ידנית שבדרך כלל עוצרת בשגיאה הראשונה.