משך: 2.5 שעות אקדמיות (113 דקות).

מטרת השיעור: הסטודנטים יבנו ארכיטקטורת שלוש-שכבות מלאה (Controller→Service→Repository), כהכנה ישירה למעבר ל-EF Core ביחידה הבאה.

בסוף השיעור הסטודנטים צריכים: להפריד Controller/Service/Repository נכון לפי אחריות, להסביר למה IRepository מאפשר החלפת מימוש קל, ולזהות היכן לוגיקה עסקית שייכת (Service, לא Controller/Repository).

דגש קריטי: זהו שיעור-הסיכום של יחידת ASP.NET Core כולה — הדגישו במפורש שכל הכלים (Middleware, Controllers, DI) מתחברים כאן לארכיטקטורה שלמה אחת.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהראו Controller עם List בפנים — “מה קורה כשעוברים ל-SQL?”
שלב 1: IRepository15 דקותGeneric Interface — קשרו ליחידת ה-Generics
שלב 2: מימוש InMemory15 דקותבדיוק מה שהיה קודם בתוך ה-Controller, רק מועבר החוצה
שלב 3: חיבור ה-Controller ל-Repository דרך DI20 דקותקשרו לשיעור ה-DI הקודם — לא נושא חדש
שלב 4: Service Layer20 דקותלוגיקה עסקית — לא HTTP, לא גישה-לנתונים
שלב 5: Controller דק, הרכבה מלאה15 דקותController→Service→Repository, כולם מוזרקים
תרגול מודרך23 דקותתרגיל 1+2 + התחלת פרויקט מסכם

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

  • זהו שיעור-שיא של היחידה — הקפידו לחבר במפורש כל רכיב לשיעור הקודם שבו נלמד: Controller↔HTTP, Service↔SRP/DIP, Repository↔Generics+DI. סטודנטים צריכים לצאת עם תחושה של “הכל מתחבר”, לא “עוד שכבה”.
  • קשרו קדימה במפורש ליחידת ה-SQL/EF Core הבאה: “בשיעור הראשון שם, תחליפו את InMemoryRepository ב-SqlRepository — אף שורה כאן לא תשתנה”.
  • אם יש זמן, שווה תרגיל-מחשבה קצר: “אילו שינויים ידרשו מעבר לSQL בכל שכבה?” — התשובה הרצויה: Repository בלבד.

מושגים

Repository Pattern — הפשטת גישה לנתונים מאחורי Interface. IRepository<T> — CRUD גנרי. Service Layer — לוגיקה עסקית, בין Controller ל-Repository. Three-Layer Architecture — Controller→Service→Repository.


תרגיל חשיבה

שאלת פתיחה: “בעוד שבועיים תחליפו את InMemoryRepository ב-SqlRepository אמיתי. כמה קבצים תצטרכו לגעת בהם, לפי הארכיטקטורה שבניתם היום?”

מהלך: הובילו את הסטודנטים למסקנה: קובץ אחד — מימוש IRepository<T> חדש, ושינוי רישום DI ב-Program.cs. Controller ו-Service לא נוגעים בכלל. זו ההוכחה הכי ישירה לערך של הארכיטקטורה שנבנתה היום — לא תיאוריה, אלא חיסכון מדיד בעבודה עתידית קרובה וממשית.

מה המרצה מראה בסוף: אם הזמן מאפשר, כתבו יחד InMemoryStudentRepository שני (עם מבנה נתונים פנימי שונה, כמו Dictionary במקום List) והחליפו רק את רישום ה-DI — הראו ש-Controller ו-Service ממשיכים לעבוד זהה לגמרי, בלי שינוי אחד בהם.