משך: 2 שעות אקדמיות (90 דקות), רובן עבודת צוותים.

מטרת השיעור: החברים האחראים על Collector בכל צוות יממשו את השירות לפי ה-Contract שנקבע.

בסוף השיעור: Collector Service עובד, מקבל בקשות ומפרסם ל-Kafka בפורמט תואם-Contract.

דגש קריטי: זהו שיעור-מימוש שמבוסס לגמרי על כלים שכבר נלמדו (Controllers, DataAnnotations, Kafka Producer) — אין נושא חדש, רק יישום צוותי.


מהלך השיעור

חלק בשיעורמשךהערות ודגשים
פתיחה וחיבור5 דקותהזכירו את ה-Contract שהצוות כתב
הדגמה: Endpoint + DTO15 דקותController בסיסי, DataAnnotations
הדגמה: Kafka Producer15 דקותפרסום תואם-Contract
202 מול 20110 דקותהסבר קצר, קישרו ליחידת HTTP
עבודת צוותים: מימוש40 דקותחבר האחראי על Collector בכל צוות
בדיקה: Consumer זמני לאימות5 דקותודאו שההודעה מגיעה נכון

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

  • זהו שיעור-יישום ולא הוראה חדשה — רוב הזמן צריך להיות עבודה בפועל, לא הרצאה.
  • ודאו שכל צוות בודק את ההודעה שמתפרסמת מול ה-Contract שלהם עצמם, לא רק “זה עבד” — התאמה מדויקת לשדות חשובה כי Analyzer (השיעור הבא) יסתמך עליה.
  • אם חבר צוות מסיים מוקדם, הציעו להם לבדוק עם Consumer זמני (docker exec על Kafka, או קוד קונסולה קצר) שההודעה בפורמט הנכון.

מושגים

Collector Pattern — קליטה והעברה בלבד, SRP. Ingestion Endpoint — endpoint קליטת נתונים. 202 Accepted — עיבוד אסינכרוני, לא מיידי.


תרגיל חשיבה

שאלת פתיחה: “אם Collector שלכם היה גם מחשב אם האירוע ‘חריג’ (לא רק מעביר אותו הלאה) — למה זו הפרת SRP, ואיזה שירות אחר אמור לעשות את זה?”

מהלך: הובילו לתובנה: זיהוי אנומליה הוא לוגיקה עסקית של ניתוח — זו אחריות Analyzer (השיעור הבא), לא Collector. Collector שגם קולט וגם מנתח מערבב שתי אחריויות שונות לגמרי — בדיוק ההפרה מיחידת SOLID (SRP), עכשיו ברמת שירות שלם ולא רק מחלקה בודדת.

מה המרצה מראה בסוף: הראו את קוד ה-Collector הסופי שנכתב בשיעור — הצביעו על כך שאין בו שום if/חישוב עסקי, רק קליטה, ולידציה בסיסית, ופרסום. זו ההוכחה שהתכנון (SRP ברמת שירות) בא לידי ביטוי בפועל בקוד עצמו.