כך החלטתי שהגיע הזמן לעשות שינוי ולהעביר את הצוות מ-Net Framework. ל-NET Core.
איך בוחרים את מערכת פיתוח המערכות האינטרנטיות שתהיה הטובה ביותר גם לצוות וגם ללקוחות הארגון, ומתי הגיע הזמן להיפרד מהמערכת המוכרת שליוותה אתכם שנים אבל כבר לא עושה את העבודה? מנהל צוותי פיתוח ומוביל טכנולוגי בחברה גדולה מסביר את כל השיקולים, הסיבות והתוצאות לעשות שינוי
צלם/תמונה: Cecilie_Arcurs/ Getty Images Israel
מאת ליאור פידגירנר, מנהל פיתוח ומוביל טכנולוגי, NESS
במהלך השנים רוב מפתחי מערכות אינטרנטיות השתמשו ב-Net Framework., עם Web API בצד שרת ובצד קליינט Angular 4/5. התוצאות המתקבלות הן די טובות והביאו לבנייה של מערכות טובות, ועדיין יש בה בעיה אחת שהפריעה לי באופן אישי. לפני כשנה קיבלתי עבור פרויקט מחשב Mac ורציתי שתהיה לי האפשרות לפתח ולתחזק מערכות גם דרכו במקום לעבור כל פעם חזרה ל-Windows, שכן מערכת שכתובות עם Net Framework. עובדות רק ב-Windows.
בנוסף, רציתי את האפשרות לפנות ללקוחות שלא רוצים לעבוד עם שרתי Windows בלבד. אז לאחר מחשבה ובדיקה מעמיקה הגעתי לשתי אפשרויות שיעזרו לי להשיג את מה שאני צריך ורוצה:
- Node.js
- Net Core
אני בחרתי ב-Net Core. כי מצאתי שהיא פלטפורמה טובה לפיתוח מערכות אינטרנטיות, ולא רק. למה בדיוק? לפניכם ההסבר המלא, רק קודם נסביר במה בכלל מדובר.
NET Core. היא פלטפורמה חינמית מבית מיקרוסופט, מבוססת קוד פתוח וחוצה פלטפורמות המאפשרת פיתוח והרצת תוכנה, בין אם זה מערכות אינטרנטיות או מערכות שרצות על המחשב בצורה מקומית (הן נקראות Universal Windows Platform). יש לה כמה מאפיינים שהופכים אותה לפלטפורמה חזקה מאוד ונוחה לשימוש:
1. עבודה אסינכרונית: בדומה ל-Node.js, הפלטפורמה תומכת בצורה טובה מאוד בעבודה אסינכרונית. המשמעות היא שניתן לעשות פעולות מורכבות, כמו עבודה מול מסד נתונים, ולבצע פעולות נוספות במקביל לעבודה מול מסד הנתונים מבלי להמתין לתשובה ממסד הנתונים לפני שממשיכים לפעולה אחרת. דוגמה לקוד אסינכרוני:
2. Dependency Injection: כל מי שעבד עם Net Framework. יודע שכדי להשתמש ב-Design Pattern הזה צריך לעבוד עם ספרייה צד שלישי, וגם לדעת איך לעבוד איתה.
ב-Net Core. זה מובנה בתוך הפלטפורמה, כמו בדוגמה הזו:
הזרקת התלות לתוך Web API Controller נראית כך:
מה ההבדל בין שתי הפלטפורמות?
לפני שבחרתי באחת על פני האחרת, ערכתי השוואה בין Node.js ל-Net Core.:
1. שפת פיתוח:
ב-Net Core. השפה היא C# שהיא כמובן השפה שבה עבדתי גם ב-Net Framework. השפה היא מונחית עצמים עם טיפוסיות חזקה (strongly typed).
ב-Node.js שפת הפיתוח היא JavaScript, שגם בה יש לי לא מעט ניסיון במהלך השנים והיא שפה “חופשית” יותר ב-C#. כלומר, לא חובה להגדיר טיפוסים למשתנים או לפונקציות, אבל עם ההגדרות החדשות של השפה (ecma 6,7) נוספה לשפה האפשרות לעבוד עם טיפוסיות חזקה וגם בצורה ברורה יותר של תכונות מונחת עצמים.
2. הדרך בה מטפלים בבקשה שמגיעה לשרת:
Node.js ידועה בתור פלטפורמה שעובדת עם תהליך אחד בלבד, שמטפל בבקשות על ידי Callbacks. המשמעות היא טיפול בכל הבקשות בתהליך אחד (thread or process). בגלל האופי האסינכרוני של הפלטפורמה, התהליך לא נחסם עקב הבקשה, מאפשר לקבל בקשות נוספות וכדי לסיים טיפול בבקשה יש קריאה ל-Callback עם התוצאה של הפעולה. הבעייתיות בשיטה הזו היא שזה יכול ליצור בלגן בקוד, כי לא ברור איזה Callback שייך לאיזו פעולה.
ב-Net Core. ניתן לעבוד גם בצורה סינכרונית וגם בצורה אסינכרונית, אך הפלטפורמה מעודדת את השימוש באסינכרוניות. בניגוד ל-Node.js, כל בקשה תרוץ תחת תהליך משלה ותאפשר לתהליכים נוספים לרוץ מקביל.
פעולה אסינכרונית ב-Node.js תיראה כך למשל:
לעומת זאת פעולה אסינכרונית ב-Net Core. תיראה למשל כך:
אז למה העדפתי לעבוד עם Net Core. ולא עם Node.js?
הביצועים של Net Core. פחות או יותר זהים ל-Node.js אבל מבדיקה שעשיתי היא בהחלט נותנת ביצועים מרשימים, ומאחר שלי ולשאר הצוות שלי יש ניסיון רק ב-Net. אז אין מבחינתנו עקומת למידה בכלל והמעבר פשוט מאוד. בנוסף, מדובר במעבר טבעי, כי רוב הקוד שכבר נכתב עבור התשתיות נשאר זהה ולא מצריך שינויים. הכף התחילה לנטות לכיוון Net Core.
מלבד הנוחות של הצוות, היה צורך לבחור בפלטפורמה שתוכל לתת מענה למגוון רחב יותר של לקוחות, כזו שלא תגביל את הפתרונות שלנו ללקוחות שעובדים עם Windows בלבד. במפגש עם לקוחות ראיתי שגם הם עושים את המעבר לפלטפורמה הזו, ומאחר שלעתים יש לנו אינטגרציה עם צוותים של לקוחות החלטתי שהנושא הוכרע וכי זו הפלטפורמה הטובה ביותר עבורנו.
לאחר עבודה של למעלה מחצי שנה עם הפלטפורמה, אני יכול לומר שההחלטה התבררה כנכונה, וכעת הפתרונות שאנו מציעים יכולים לפנות למגוון רחב יותר של לקוחות והביצועים של המערכות שאנו מפתחים השתפרו מאוד.

הכתבה בחסות Ness
Ness מתמחה למעלה מ-20 שנים בפיתוח פרויקטים בתחום התוכנה בהיקף לאומי עבור גופים ציבוריים, משרדים ממשלתיים רבים, בנקים, חברות ביטוח, גופי הייטק בינלאומיים, כוחות וגופי ביטחון, סטארטאפים ועוד. שירותי הנדסת התוכנה וה- Coding שלנו מבוססים על התמחותנו בפיתוח מאות מוצרים, מערכות, אתרים, אפליקציות ויישומים ארגוניים במגוון אדיר של טכנולוגיות ופלטפורמות. אנו מזמינים אותך להצטרף אלינו >>> .
הגב
34 תגובות על "כך החלטתי שהגיע הזמן לעשות שינוי ולהעביר את הצוות מ-Net Framework. ל-NET Core."
* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.
שורה תחתונה בחרת לעבוד עם מערכת אזוטרית של חברה שידועה בזניחת טכנולוגיות, במקום מערכת בצמיחה הכי מהירה כיום ועם אקוסיסטם הולך ומתרחב, בגלל קוד קיים ועקומת למידה. זה לגיטימי, אבל הבחירה לך לא אומרת כלום לאף אחד אחר.
אף אחד כמעט היום לא כותב לנוד עם JS אלא אכן TS, כך שזה לא רלוונטי, ול Callback Hell יש פתרונות לרוב.
מה שמייקרוסופט נוגעת בו נחרב, בית קברות לטכנולוגיה.
לגמרי,
אין שום סיבה להשתמש במיקרוסופט.
רק אם סוחבים איזה לגסי.
הייתי מתרחק מהם כמו מאש כשמדובר בפיתוח ווב
נדיר שאני מגיב, אבל הייתי חייב
מצטט
"מה שמייקרוסופט נוגעת בו נחרב, בית קברות לטכנולוגיה."
"אף אחד כמעט היום לא כותב לנוד עם JS אלא אכן TS,"
ידוע לך ש-TS זה מוצר של מייקרוסופט?
מוזמן לבדוק מה המגמה של שימוש במוצרי מייקרוסופט: https://stackshare.io/stacks
במקרה הטוב IIS או Azure. שום טכנולוגיה ממשית
לגמריי. נמאס כבר לשמוע טיעונים ריקים מתוכן ומגוחכים ברגע שמבררים את העובדות… מייקרוסופט עושה דברים ראויים להערכה מאז שהמנכ"ל החדש נכנס לתפקיד.
אגב אני בטוח שהוא מאוד אוהב את async await שהומצא על ידי מייקרוסופט והושאל לjs מc#..
אנשים פה תקועים כמה שנים אחורה, מדברים מחוסר ידע אקטואלי, ובכלל מגזימים בביטויים חסרי כל בסיס. מיקרוסופט זה בית קברות לטכנולוגיה? הטכנולוגיות האחרות שאתם מפתחים בהם היו נראות אחרת ואף אולי לא קיימות אילולא מיקרוסופט לא הייתה תורמת את חלקה בדרך ישירה או עקיפה. תפסיקו לדבר שטויות, תתעדכנו ותעריכו את תרומתם הטובה והרעה, מיקרוסופט עשו טעויות, שינו דרך, ה core החדש לא דומה לשום דבר שהכרתם בעבר על מיקרוסופט, אז אנא, אל תטיפו לאחרים בבורותכם. תודה.
השפעות של Microsoft:
1) RxJS LINQ-style:
https://xgrommx.github.io/rx-book/content/getting_started_with_rxjs/what_are_the_reactive_extensions.html
2) JS async-await:
https://en.wikipedia.org/wiki/Futures_and_promises#History
3) TypeScript:
https://en.wikipedia.org/wiki/TypeScript
4) VSCode:
https://en.wikipedia.org/wiki/Visual_Studio_Code
בוגד
בפיתוח של מוצר עם תכנון לטווח ארוך ומעבר בין מפתחים הכרה של השפה היא דבר חשוב מאוד דווקא. בנוסף העניין שהמעבר היה יותר קליל נשמע לי שיקול כלכלי חשוב ונכון מאוד. מהנדס תוכנה- אולי תועיל להסביר למה ניסיונו של הכותב הוא דל?? לרוץ להעביר מערכות שלימות לספריית קוד פתוח זה לא תמיד הפתרון הנכון. ואם אתה חושב אחרת אתה כנראה החסר ניסיון.
פיתוח לטווח ארוך- זה טעות אסטרטגית נפוצה – יש כבר קונצזוס על זה
הבעיה- הטכנולוגיה דוהרת במהירות – אחרי 5 שנות פיתוח כשתסיים לבנות את התוכנה המושלמת- היא כבר לא תהיה רלוונטית , לא מבחינת השוק ולא מבחינה טכנולוגית
חוץ מזה דווקא בפיתוח לטווח ארוך משתלם להשתמש בטכנולוגיה המתאימה ביותר ושהמפתחים ישקיעו עוד איזה 3 חודשים בלימוד שלה( כאילו שלימשהו יש כוח לזה )
הכתבה עזרה לי להבין משהו חשוב מאוד:
בפעם הבאה שאהיה בשוק לחיפוש המשרה הבאה, אני יכול בקלות לשאוף להיות מנהל פיתוח ומוביל טכנולוגי, כי כותב כתבה זו מתהדר בטייטל זה ואני מכיר את הפלטפורמות והשיקולים השונים יותר טוב ממנו.
אילו שיקולים לדעתך הכותב לא ציין?
אני אשמח לדעצ
אשמח גם לשמוע מה יש לך להוסיף
הערה אחת, הביצועים של .Net Core בשביל web server. טובים בהרבה משל נוד. חפש השוואות בגוגל.
הנה: https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=fortune
מה שרלונטי זה המיקומים של aspcore לעומת nodejs
Postgres sql עם node.js עובד הכי טוב שראיתי. גם ככה בסוף כל הלוגיקה יושבת בפרוצדורה או בצד לקוח. עבודה עם node.js הרבה יותר קלה וגמישה.
"לוגיקה יושבת בפרוצדורה או בצד לקוח"
ממש לא!!
אוי ואבוי
תלמד design patterns ותראה איפה ממשים את הלוגיקה
טיפש גמור
לכל שונאי מיקרוסופט (אני לא חסיד מיקרוסופט בעצמי), עזבו אותכם מדיבורים, עשו חיפוש תיראו שהביצועים הרבה יותר טובים מ-node, הכיוון של החברה עכשיו הוא כיוון טוב, אין ספק שמאז כניסת .Net Core מיקרוסופט הולכת בכיוון נכון, הסביבה נראית טוב, ידידותית, יעילה ופתוחה… עם כל הטכנולוגיות החדשות שצריך, חוץ מקצת פופולאריות, יש לה הכל, וגם אולי ניתן לה קצת זמן עם הגישה החדשה של מיקרוסופט ונראה.
Welcome .Net Core
כבר שנים אנחנו עובדים עם gwt של גוגל, כותבים ב java גם בצד שרת וגם בצד לקוח
חח מדהים כמה רגשות הכתבה הצליחה לעורר.
יגייסו אותך ל-ynet, הם אוהבים כתבות שמייצרות הרבה רגש, ותגובות.
בתכלס מה שנראה לי שהכי נוח לfull-stack זה js+node
יש כל מיני פתרונות כמו GWT ואחרים- אבל זה פתרונות לאנשים שאלרגיים לJS ופיתוח לסביבת אינטרנט( כמוני )- ואין בהם יתרון חוץ מזה שלא צריך ללמוד NODE+JS
אני בהלם שעדיין אנשים כותבים בGWT ה' יקום דמם. אחד הטעויות הגדולות שעשיתי בעבר. לקח לי שנים להגר את כל הפרוייקטים והלקוחות לסביבה חדשה (node + אנגולר) ותחומיי למי שנשאר עם GWT (שכידוע גם גוגל זנחה די מהר, סליחה "תרמה" לאפאצ'י).
מחפש עובד לעבודה במשרה מלאה
לעבוד על אתר חדש ב .net core
[email protected]
מחפש עובד לעבודה במשרה מלאה
לעבוד על אתר חדש ב .net core
[email protected]