# מערך שיעור: תבנית 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<Student> בפנים — "מה קורה כשעוברים ל-SQL?" |
| שלב 1: IRepository<T> | 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` ממשיכים לעבוד זהה לגמרי, בלי שינוי אחד בהם.
