ניהול חבילות קוד מפוצלות הוא סיוט מוכר לכל מפתח בקאנד. עד לאחרונה, מי שבנה שירותי C# מול Supabase נאלץ לתמרן בין חבילות פנימיות שחיו בעולמות נפרדים, כשלכל רכיב היה קצב חיים משלו. עכשיו החברה החליטה לעשות סדר בכל הבלאגן הזה בבת אחת. ההודעה על שחרור גרסה 8 מציגה מודל עבודה מסונכרן לחלוטין, אבל מביאה איתה שורה של שינויים שוברים שדורשים היערכות בקוד הקיים.
לא הייתי ממהר לשדרג לפני בדיקת מודלים קפדנית.
סוף לבלגן בגרסאות ה-NuGet
המצב הקודם היה מקור תמידי לכאבי ראש בעבודה עם מנהל התלויות. חבילת Gotrue רצה בגרסה 6, רכיב Realtime טיפס לגרסה 7, וחבילת העל של Supabase עמדה בכלל על גרסה 1. כדי לפתור את חוסר ההתאמה הזה, הצוות דילג ישר לגרסה 8.0.0. המהלך נועד להבטיח שכל החבילות יתקדמו מאותה נקודה. מעתה כל הרכיבים משתחררים יחד בסנכרון מלא, כך שברור בדיוק אילו תלויות מתאימות זו לזו.
במקביל, כל הפרויקטים רוכזו במאגר יחיד בשם supabase-community/supabase-csharp באתר GitHub. המאגרים הישנים והמפוצלים הועברו למצב קריאה בלבד ולא יקבלו עדכונים נוספים. איחוד כל החבילות למאגר יחיד תחת גרסה 8 מיישר קו עם עולם ה-NET ומבטל תקלות סנכרון בין הרכיבים.
Moving from v1.x.x to v8.0.0, in one go, is quite a bump and unusual. It was our only option to guarantee lockstep-versioning.Guillaume Faas בבלוג ההנדסה של Supabase
הזרקת תלויות מובנית ב-ASP.NET
השינוי הארכיטקטוני המרכזי מגיע בדמות חבילת הרחבה חדשה לחלוטין. החבילה Supabase.Extensions.DependencyInjection מספקת חיבור ישיר לקונטיינר השירותים המובנה. מפתחים שעובדים בסביבת ASP.NET Core יכולים לרשום את הלקוח ישירות בקובץ ההגדרות הראשי של המערכת בלי לכתוב מעטפות מותאמות אישית.
הממשק החדש מתבסס על IHttpClientFactory לניהול מחזור החיים של חיבורי HTTP, מה שמונע דליפת חיבורים בעומסים גבוהים. בנוסף, כל חבילות השירות כוללות כעת מנגנון ניסיונות חוזרים עם השהיה מובנית ומתכווננת, כך שהקוד עמיד יותר לנפילות רשת רגעיות.
מה יישבר לכם בקוד
הסדר החדש מגיע עם מחיר ברור בצד של תאימות לאחור. המעבר מספריית Newtonsoft.Json המוכרת לספריית System.Text.Json המובנית הוא העיקרי שבהם. אם המודלים שלכם כללו תכונות סריאליזציה מותאמות או ממירי JSON ייעודיים, הקוד ידרוש שכתוב והתאמה למחלקות החדשות לפני שתוכלו להריץ בדיקות תקינות.
שינוי נוסף מציב גבול ברור לסביבות ריצה. לפי ההודעה, כל החבילות מכוונות כעת ל-netstandard2.1, ובחברה מציינים שמי שהשתמש בחבילת העל כבר היה על היעד הזה. מנגד, הלקוח תומך כעת גם במפתחות API סודיים וציבוריים ומאפשר הפרדה טובה יותר בין סביבות עבודה.
זה שווה את זה רק אם האפליקציה כבר כתובה בגרסאות NET מודרניות.
קהילתי ולא רשמי עם חוזה
למרות ההכרזה הרשמית בבלוג, כדאי לשים לב לפרטים הקטנים של ניהול הפרויקט. קוד הפרויקט והספרייה המרכזית מתארחים תחת ארגון supabase-community ב-GitHub, והמאגרים הישנים הוסרו מדף הקהילה. לא פורסם מידע לגבי התחייבות רשמית לתמיכת שירות ארגונית ברמת המוצר לספרייה הזו.
אם אתם עובדים מול בסיס הנתונים ישירות דרך EF Core ומתחברים ב-Npgsql בלי לגעת בשכבת ה-REST או ב-Realtime, השדרוג הזה פשוט לא ישפיע עליכם. גם בזווית המקומית אין בשורות מיוחדות: התמיכה בעברית ממשיכה להישען על הגדרות ה-PostgreSQL בשרת ללא מאפיינים מותאמים לישראל.
| מאפיין | בגרסאות הקודמות (v1-v7) | בגרסה 8 החדשה |
|---|---|---|
| מבנה גרסאות | גרסאות שונות לכל רכיב (Realtime v7, Gotrue v6) | גרסה 8.0.0 אחודה ומסונכרנת לכל החבילות |
| מאגרי קוד | מאגרים נפרדים לכל ספרייה ב-GitHub | מאגר יחיד (Monorepo) תחת supabase-community |
| ספריית סריאליזציה | Newtonsoft.Json | System.Text.Json |
| הזרקת תלויות | לא פורסם | חבילת Supabase.Extensions.DependencyInjection |
| יעד סביבת ריצה | netstandard2.1 בחבילת העל | netstandard2.1 לכל החבילות |
השדרוג נותן שקט תעשייתי למי שמקים שירות חדש, אבל דורש עבודה אם יש לכם מחלקות נתונים ותיקות. בדקו היטב את ממירי המידע לפני שאתם מעדכנים את קובץ התלויות בפרודקשן.
מקורות
- Introducing the unified Supabase .NET SDKhttps://supabase.com/blog/introducing-the-unified-supabase-net-sdk
- מאגר הקוד של Supabase C# ב-GitHubhttps://github.com/supabase-community/supabase-csharp
- ASP.NET Corehttps://weba.co.il/tools/asp-net-core/
- GitHubhttps://weba.co.il/tools/github/
- Supabasehttps://weba.co.il/tools/supabase/
- JSONhttps://weba.co.il/glossary/json/
הידיעה נכתבה מהמקורות שלמעלה בתאריך הפרסום, וכל טענה בה נבדקה מולם. מצאתם טעות? כתבו.