On this page
מערך שיעור: Exceptions לעומק
משך: 2 שעות אקדמיות (90 דקות).
מטרת השיעור: הסטודנטים יבינו את היררכיית ה-Exceptions וייצרו Custom Exception עסקי משל עצמם.
בסוף השיעור הסטודנטים צריכים: לסדר נכון כמה בלוקי catch לפי היררכיה, ליצור Custom Exception עם שדות מותאמים אישית, ולהסביר למה חריגה עסקית עדיפה על Exception גנרי.
דגש קריטי: זהו הרחבה ישירה של שיעור ה-Exceptions הבסיסי מהיחידה הקודמת — פתחו בחזרה קצרה על try/catch/finally לפני שמעמיקים.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | חזרה קצרה: try/catch/finally מהיחידה הקודמת |
| הרעיון: היררכיה | 15 דקות | כל Exception יורש מ-Exception; catch כללי תופס גם ספציפי |
| הבעיה: סדר catch שגוי | 10 דקות | הדגימו שגיאת קומפילציה כשclass הכללי לפני הספציפי |
| הבעיה: Exception גנרי לשגיאה עסקית | 10 דקות | throw new Exception(“no money”) — קשה לתפוס ממוקד |
| הרעיון: Custom Exception | 25 דקות | InsufficientFundsException עם שדות ובנייה עם base |
| תרגול מודרך | 20 דקות | תרגיל 1+2 |
דגשים להעברת השיעור
- הדגישו שהיררכיית catch מסודרת ספציפי→כללי היא חובה קומפילציה, לא רק המלצת סגנון — הדגימו את השגיאה בפועל.
- Custom Exception צריך תמיד להיקשר לתרחיש עסקי אמיתי מהדומיין (לא “דוגמה גנרית”) — זה מה שהופך אותו שימושי, לא רק “עוד class שיורש מ-Exception”.
- אם יש זמן, שווה להזכיר בקצרה ש-Custom Exceptions יתחברו בהמשך הקורס ל-Middleware טיפול-בשגיאות ב-ASP.NET Core.
מושגים
Exception Hierarchy — כל החריגות יורשות מ-Exception.
Custom Exception — מחלקה שיורשת מ-Exception, מייצגת שגיאה עסקית ספציפית.
throw — זריקה יזומה של חריגה כשמצב לא תקין מתגלה.
תרגיל חשיבה
שאלת פתיחה: “אתם בונים מערכת הזמנות. יש לכם throw new Exception(\"error\") בכל מקום שמשהו משתבש — מלאי חסר, תשלום נכשל, כתובת לא תקינה. מה הבעיה כשקוד קורא מנסה לתפוס ולהגיב אחרת לכל אחד מהם?”
מהלך: הובילו לתובנה: בלי סוגים ייחודיים, קוד קורא לא יכול להבדיל בין הסיבות בלי לפרש את תוכן ה-Message (מחרוזת חופשית, שברירה ופגיעה לשינויים). Custom Exceptions לכל תרחיש עסקי הופכים את ההבחנה לבטוחת-טיפוסים ונבדקת בקומפילציה.
מה המרצה מראה בסוף: הראו קוד עם catch (Exception ex) { if (ex.Message.Contains("stock")) ... } — פרסור מחרוזות שברירי. מיד אחר כך, אותו תרחיש עם catch (OutOfStockException ex) { ... ex.RequestedQuantity ... } — קומפילציה בטוחה, גישה ישירה לנתונים מובְנים.