כך החלטתי שהגיע הזמן לעשות שינוי ולהעביר את הצוות מ-Net Framework. ל-NET Core.

איך בוחרים את מערכת פיתוח המערכות האינטרנטיות שתהיה הטובה ביותר גם לצוות וגם ללקוחות הארגון, ומתי הגיע הזמן להיפרד מהמערכת המוכרת שליוותה אתכם שנים אבל כבר לא עושה את העבודה? מנהל צוותי פיתוח ומוביל טכנולוגי בחברה גדולה מסביר את כל השיקולים, הסיבות והתוצאות לעשות שינוי

 Cecilie_Arcurs/ Getty Images Israel

צלם/תמונה: Cecilie_Arcurs/ Getty Images Israel

מאת ליאור פידגירנר, מנהל פיתוח ומוביל טכנולוגי, NESS

במהלך השנים רוב מפתחי מערכות אינטרנטיות השתמשו ב-Net Framework., עם Web API בצד שרת ובצד קליינט Angular 4/5. התוצאות המתקבלות הן די טובות והביאו לבנייה של מערכות טובות, ועדיין יש בה בעיה אחת שהפריעה לי באופן אישי. לפני כשנה קיבלתי עבור פרויקט מחשב Mac ורציתי שתהיה לי האפשרות לפתח ולתחזק מערכות גם דרכו במקום לעבור כל פעם חזרה ל-Windows, שכן מערכת שכתובות עם Net Framework. עובדות רק ב-Windows.

בנוסף, רציתי את האפשרות לפנות ללקוחות שלא רוצים לעבוד עם שרתי Windows בלבד. אז לאחר מחשבה ובדיקה מעמיקה הגעתי לשתי אפשרויות שיעזרו לי להשיג את מה שאני צריך ורוצה:

  1. Node.js
  2. 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 שלנו מבוססים על התמחותנו בפיתוח מאות מוצרים, מערכות, אתרים, אפליקציות ויישומים ארגוניים במגוון אדיר של טכנולוגיות ופלטפורמות. אנו מזמינים אותך להצטרף אלינו >>> .

כתב אורח

אנחנו מארחים מפעם לפעם כותבים טכנולוגים אורחים, המפרסמים כתבות בתחומי התמחות שלהם. במידה ואתם מעוניינים לפרסם פוסט בשמכם, פנו אלינו באמצעות טופס יצירת קשר באתר.

הגב

29 תגובות על "כך החלטתי שהגיע הזמן לעשות שינוי ולהעביר את הצוות מ-Net Framework. ל-NET Core."

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* שימו לב: תגובות הכוללות מידע המפר את תנאי השימוש של Geektime, לרבות דברי הסתה, הוצאת דיבה וסגנון החורג מהטעם הטוב ו/או בניגוד לדין ימחקו. Geektime מחויבת לחופש הביטוי, אך לא פחות מכך לכללי דיון הולם, אתיקה, כבוד האדם והדין הישראלי.

סידור לפי:   חדש | ישן | הכי מדורגים
מישהו
Guest

שורה תחתונה בחרת לעבוד עם מערכת אזוטרית של חברה שידועה בזניחת טכנולוגיות, במקום מערכת בצמיחה הכי מהירה כיום ועם אקוסיסטם הולך ומתרחב, בגלל קוד קיים ועקומת למידה. זה לגיטימי, אבל הבחירה לך לא אומרת כלום לאף אחד אחר.

אף אחד כמעט היום לא כותב לנוד עם JS אלא אכן TS, כך שזה לא רלוונטי, ול Callback Hell יש פתרונות לרוב.

מה שמייקרוסופט נוגעת בו נחרב, בית קברות לטכנולוגיה.

רמי
Guest

לגמרי,
אין שום סיבה להשתמש במיקרוסופט.
רק אם סוחבים איזה לגסי.
הייתי מתרחק מהם כמו מאש כשמדובר בפיתוח ווב

חוכמלוג
Guest

נדיר שאני מגיב, אבל הייתי חייב

מצטט
“מה שמייקרוסופט נוגעת בו נחרב, בית קברות לטכנולוגיה.”
“אף אחד כמעט היום לא כותב לנוד עם JS אלא אכן TS,”

ידוע לך ש-TS זה מוצר של מייקרוסופט?

מישהו
Guest
א. אם היא הייתה נשארת בידיים שלהם, לא מאומצת ע”י המפתחים והפריימוורקים הגדולים ונוד לא היה מפותח, היא הייתה מסיימת כמו שאר מוצרי מייקרוסופט שנעלמו מהשטח. ב. “מוצר שלהם”. זה לא אקוסיסטם כמו .net הקנייני לשעבר, בסה”כ תקן לשפה קיימת (נניח בגסות). ECMA הם לא רק מייקרוסופט והשפה הייתה מתקדמת במוקדם או במאוחר. בפועל, כשפה עצמאית, הדפדפנים עדיין לא תומכים TS, כך שבתחום היחיד שהיא באמת יכלה לעשות משהו בעצמה עם ts היא לא עשתה כלום. אם זה יקרה זה בוודאי יהיה על ידי גוגל ומוזילה, כי השליטה של מייקרוסופט בתחום הפרונטאנד אפסית, עובדה די מדהימה בהתחשב בהיסטוריה שלה ובמשאבים… Read more »
מישהו
Guest

מוזמן לבדוק מה המגמה של שימוש במוצרי מייקרוסופט: https://stackshare.io/stacks
במקרה הטוב IIS או Azure. שום טכנולוגיה ממשית

איתן
Guest

לגמריי. נמאס כבר לשמוע טיעונים ריקים מתוכן ומגוחכים ברגע שמבררים את העובדות… מייקרוסופט עושה דברים ראויים להערכה מאז שהמנכ”ל החדש נכנס לתפקיד.

אגב אני בטוח שהוא מאוד אוהב את async await שהומצא על ידי מייקרוסופט והושאל לjs מc#..

אורח
Guest

אנשים פה תקועים כמה שנים אחורה, מדברים מחוסר ידע אקטואלי, ובכלל מגזימים בביטויים חסרי כל בסיס. מיקרוסופט זה בית קברות לטכנולוגיה? הטכנולוגיות האחרות שאתם מפתחים בהם היו נראות אחרת ואף אולי לא קיימות אילולא מיקרוסופט לא הייתה תורמת את חלקה בדרך ישירה או עקיפה. תפסיקו לדבר שטויות, תתעדכנו ותעריכו את תרומתם הטובה והרעה, מיקרוסופט עשו טעויות, שינו דרך, ה core החדש לא דומה לשום דבר שהכרתם בעבר על מיקרוסופט, אז אנא, אל תטיפו לאחרים בבורותכם. תודה.

יצחק
Guest
ב”ה המעבר האחרון שעשיתי היה מ .net core ל node js פשוט מיקרוסופט כל תקופה קצרה החליטו לבצע שינויים שדרשו ממני שעות של עבודה בין גירסאות וזה מה שבמידה מסויימת גרם לי לנסות אלטרנטיבה אחרת, דווקא אני מאוד מרוצה מהמעבר, היום לא הייתי מוכן לחזור אחורה ב node js יש לך את כל ההיתרונות של cross platform ככה שממש אין צורך בכלי מיקרוסופט כובלים ולגבי ה strong types אני ממליץ להשתמש בכל סוג של פיתוח עם typeScript ככה ניתן להשתמש באותם מחלקות שעשית בצד קליינט או בצד שרת והכל בשפה אחידה ונוחה, לגבי ה TS הוא די דומה ל C#… Read more »
מפתח .NET
Guest

בוגד

מהנדס תוכנה
Guest
כתבה מאוד שיטחית ומראה על נסיון דל של הכותב. יש סיבות טובות לבחור ב.net core על פני node, הכרה של השפה בלבד לא מצדיקה! במיוחד שמדובר בשתי שפות חיות מאוד ומשתנות עם הזמן. טענת כי מבחינת ביצועים הם לא נופלות אחת מהשניה, אני אשמח לשמוע מה ההשוואה שעשית, כי ממה שאנחנו עשינו אצלנו רואים פעם ברור לטובת node, על גבי linux. אני מניח גם שאתם לא עובדים בענן שם היתרונות של node אפילו גוברים עוד יותר. לגבי שאר התגובות, לכל מי ששונא מיקרוסופט, אני ממליץ לבדוק מחדש את החברה שתורמת הרבה כיום לקוד פתוח, לnode בפרט, כבר לא מודבר במפלצת… Read more »
חיים
Guest

בפיתוח של מוצר עם תכנון לטווח ארוך ומעבר בין מפתחים הכרה של השפה היא דבר חשוב מאוד דווקא. בנוסף העניין שהמעבר היה יותר קליל נשמע לי שיקול כלכלי חשוב ונכון מאוד. מהנדס תוכנה- אולי תועיל להסביר למה ניסיונו של הכותב הוא דל?? לרוץ להעביר מערכות שלימות לספריית קוד פתוח זה לא תמיד הפתרון הנכון. ואם אתה חושב אחרת אתה כנראה החסר ניסיון.

c++ forever
Guest

פיתוח לטווח ארוך- זה טעות אסטרטגית נפוצה – יש כבר קונצזוס על זה
הבעיה- הטכנולוגיה דוהרת במהירות – אחרי 5 שנות פיתוח כשתסיים לבנות את התוכנה המושלמת- היא כבר לא תהיה רלוונטית , לא מבחינת השוק ולא מבחינה טכנולוגית
חוץ מזה דווקא בפיתוח לטווח ארוך משתלם להשתמש בטכנולוגיה המתאימה ביותר ושהמפתחים ישקיעו עוד איזה 3 חודשים בלימוד שלה( כאילו שלימשהו יש כוח לזה )

עופר
Guest

הכתבה עזרה לי להבין משהו חשוב מאוד:

בפעם הבאה שאהיה בשוק לחיפוש המשרה הבאה, אני יכול בקלות לשאוף להיות מנהל פיתוח ומוביל טכנולוגי, כי כותב כתבה זו מתהדר בטייטל זה ואני מכיר את הפלטפורמות והשיקולים השונים יותר טוב ממנו.

מפתח
Guest

אילו שיקולים לדעתך הכותב לא ציין?
אני אשמח לדעצ

אורח
Guest

אשמח גם לשמוע מה יש לך להוסיף

איל
Guest
למרות שהמסקנה נכונה. המאמר לוקה בחסר. א. הקטע של callback hell כבר נפתר מזמן בעולם הjs והדוגמא שהבאת לא רלוונטית בכלל. אף אחד לא כותב ככה היום. יש async await גם ב js. ב. מבחינת ביצועים דווקא .net core על שרתי לינוקס מציגה ביצועים הרבה יותר טובים לעומת node js. צריך לשים לב שמשווים א-סינכרוני בשתי הסביבות. ולזכור שאף אחד (כמעט) לא משתמש בnode בלי פריימוורק, ואז רואים ש express לדוגמא לעומת asp net core יוצא הרבה יותר איטי. דוגמא מעשית https://raygun.com/blog/dotnet-vs-nodejs/ בקיצור, ההשוואה לא רלוונטית. באמת asp .net core מנצחת מבחינת ביצועים. גם אם כיום nodejs היא באופנה, עדין… Read more »
L.S
Guest

הערה אחת, הביצועים של .Net Core בשביל web server. טובים בהרבה משל נוד. חפש השוואות בגוגל.

L.S
Guest

הנה: https://www.techempower.com/benchmarks/#section=data-r17&hw=ph&test=fortune

מה שרלונטי זה המיקומים של aspcore לעומת nodejs

דודו
Guest

Postgres sql עם node.js עובד הכי טוב שראיתי. גם ככה בסוף כל הלוגיקה יושבת בפרוצדורה או בצד לקוח. עבודה עם node.js הרבה יותר קלה וגמישה.

אורח
Guest

לכל שונאי מיקרוסופט (אני לא חסיד מיקרוסופט בעצמי), עזבו אותכם מדיבורים, עשו חיפוש תיראו שהביצועים הרבה יותר טובים מ-node, הכיוון של החברה עכשיו הוא כיוון טוב, אין ספק שמאז כניסת .Net Core מיקרוסופט הולכת בכיוון נכון, הסביבה נראית טוב, ידידותית, יעילה ופתוחה… עם כל הטכנולוגיות החדשות שצריך, חוץ מקצת פופולאריות, יש לה הכל, וגם אולי ניתן לה קצת זמן עם הגישה החדשה של מיקרוסופט ונראה.
Welcome .Net Core

מתכנת
Guest
שאלה לשאר המגיבים כאן. בתור מתכנת שמעולם לא סבל פיתוח ל WEB וחושב שמתכנתי WEB צריכים לקבל פיצויים מביטוח לאומי על נזק נפשי על עבודה בסביבה הזו, כשכל שנתיים מישהו אחר קופץ עם טכנולוגיה אחרת…(הנה הנה השאלה) האם כעת ב 2018, יש קוד של שפה אחת שרץ גם בשרת וגם בדפדפן ? ה NET CORE רץ גם בדפדפן וגם בשרת ? ה NODE JS רץ גם בדפדפן וגם בשרת ? או שעדיין צריך 2 טכנולוגיותשפות שונות בשביל “אפלקציית” WEB שרצה בשרת-לקוח ? תודה, מתכנת שמודה לאלוהים שנתן לי את הזכות לא להתעסק ב WEB למרות, וכאן חייבים לציין שזו הסביבה… Read more »
סתם אחד
Guest
קודם כל אני מסכים איתך.. כל שבוע קופץ היפסטר עם כתבה במדיום “למה החלטתי להפסיק להשתמש ב.. ולעבור ל..” או הטכנולוגיה שאתמול קראת עליה היום כבר אין מי שיתחזק אותה.. סיוט.. אני full stack כבר 5 שנים ויש לי מלאאא ידע לא רלוונטי כבר.. אבל מי שאוהב קוד זה התחום הכי טוב.. לדעתי. לשאלתך, כן.. javascript היא השפה היחידה שאתה יכול תכנת בה בצד לקוח ושרת, בצד לקוח (דפדפן) אתה יכול לכתוב js חופשי אבל היום אנשים משתמשים בfw כמו angular , Vue או react, בצד שרת אתה יכול לכתוב גם בjs אבל אתה צריך את node.js מותקן, הקונטקסט ושונה… Read more »
יובל
Guest

כבר שנים אנחנו עובדים עם gwt של גוגל, כותבים ב java גם בצד שרת וגם בצד לקוח

סתם אחד
Guest
ביקורת בונה לכתבה. אני מצטער שאני נמנה עם כולם לגבי תגובות נגד אבל אני אנסה לעשות את נורמלי שיצא מזה משהו טוב. קודם כל לגבי ההחלטה שלך לעבור מ.net framework לcore רשמת 2 סיבות לא מספקות, גם בגרסאות שלפני core כותבים הכל async מי שלא כותב ככה פשוט מתכנת לא טוב, הדבר השני שכתבת זה לגבי הDI שזה מובנה בcore ובגרסאות לפני היית צריך nuget package בשביל זה.. אז מה? מתכנתים משתמשים במלא nuget package בקוד , יש גם DI שעבדתי איתם שהם ממש ממש שטובים ונוחים ומתוחזקים ממש טוב. לגבי ההחלטה בין node לcore, למי שיש רקע בc# טבעי… Read more »
מהנדס
Guest
אם אתה הולך על מפתחים ללא ניסיון אתה צודק, יותר קל להכשיר מפתחי node מאשר C# אבל מה אתה עושה אם יש לך צוות קיים שכבר יודע טוב C#? ובנוסף יש לך תשתיות מוכנות אתה תזרוק הכל לפח רק כיד NODE יותר קל כביכול?? לגבי async נכון שזה היה גם ב.net framework אבל ב core מאחר והסביבה בה הוא רץ גם תומכת בצורה מאוד טובה בעבודה אסינכרונית (IIS לא ממש ) לכן זה כן יתרון משמעותי. חוץ מזה אם לא שמת לב ה2 סיבות למעבר הן לא סיבות אלא הבדלים בין node ל core. לגבי שרתים, האם פעם חשבת על… Read more »
גילי
Guest

חח מדהים כמה רגשות הכתבה הצליחה לעורר.
יגייסו אותך ל-ynet, הם אוהבים כתבות שמייצרות הרבה רגש, ותגובות.

half-stack
Guest

בתכלס מה שנראה לי שהכי נוח לfull-stack זה js+node
יש כל מיני פתרונות כמו GWT ואחרים- אבל זה פתרונות לאנשים שאלרגיים לJS ופיתוח לסביבת אינטרנט( כמוני )- ואין בהם יתרון חוץ מזה שלא צריך ללמוד NODE+JS

משתמש אובונטו
Guest

אני בהלם שעדיין אנשים כותבים בGWT ה’ יקום דמם. אחד הטעויות הגדולות שעשיתי בעבר. לקח לי שנים להגר את כל הפרוייקטים והלקוחות לסביבה חדשה (node + אנגולר) ותחומיי למי שנשאר עם GWT (שכידוע גם גוגל זנחה די מהר, סליחה “תרמה” לאפאצ’י).

דורון
Guest
היי ליאור, תודה על השיתוף בתובנות. אני חושב שהמעבר מ- .Net Framework ל- .Net Core הוא מתבקש בשלב מסויים. אין ספק שמיקרוסופט מטילה את כל כובד משקלה על הפלטפורמה החדשה (הם מבטיחים להמשיך לתחזק את .Net Framework אבל ברור שהוא כבר לא הילד המועדף). עקבתי אחרי Core בתחילת דרכה (ועשיתי את המעבר מ- Framework ל- Core). אחד הדברים החשובים לשקול הוא הבשלות של הפלטפורמה. בהתחלה, כל גרסא חדשה של Core הביאה הרבה שינויים שוברים (Backward Compatibility) מה שדי פסל אותה לשימוש בפרויקטים לפרודקשן. משינויים שוברים בממשקים של הספריות עד לשינויים שוברים במבנה הפרויקט (זה היה *ממש* לא כיף). עצתי לך… Read more »
wpDiscuz

תגיות לכתבה: