On this page
מערך שיעור: תבנית DAL
משך: 2.5 שעות אקדמיות (113 דקות).
מטרת השיעור: הסטודנטים יבנו ארכיטקטורת שלוש-שכבות מלאה (Controller→Service→Repository), כהכנה ישירה למעבר ל-EF Core ביחידה הבאה.
בסוף השיעור הסטודנטים צריכים: להפריד Controller/Service/Repository נכון לפי אחריות, להסביר למה IRepository מאפשר החלפת מימוש קל, ולזהות היכן לוגיקה עסקית שייכת (Service, לא Controller/Repository).
דגש קריטי: זהו שיעור-הסיכום של יחידת ASP.NET Core כולה — הדגישו במפורש שכל הכלים (Middleware, Controllers, DI) מתחברים כאן לארכיטקטורה שלמה אחת.
מהלך השיעור
| חלק בשיעור | משך | הערות ודגשים |
|---|---|---|
| פתיחה וחיבור | 5 דקות | הראו Controller עם List |
| שלב 1: IRepository | 15 דקות | Generic Interface — קשרו ליחידת ה-Generics |
| שלב 2: מימוש InMemory | 15 דקות | בדיוק מה שהיה קודם בתוך ה-Controller, רק מועבר החוצה |
| שלב 3: חיבור ה-Controller ל-Repository דרך DI | 20 דקות | קשרו לשיעור ה-DI הקודם — לא נושא חדש |
| שלב 4: Service Layer | 20 דקות | לוגיקה עסקית — לא 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 ממשיכים לעבוד זהה לגמרי, בלי שינוי אחד בהם.