-
הנושא כאוב אבל בכלל זאת....
אני משתוקק להתחיל לכתוב בטכנולגית WEB
(לא בגלל שאקסס לא טוב לי אך יתרונו הגדול של WEB זה הזמניות בכל מקום)
היכן מתחילים?
- מהם ההבדלים בן 2 הטכנלוגיות האלו.
- מה יותר קל לכתוב מבין 2 הטכנלוגיות האלו הן בחינת כתיבה והן בחינת תחזוקה בעתיד
הבעיות שלי בלצלול למים
- אני לא יודע C# אלא יותר VB
- כמה שאני מנסה להבין את טכנולגית ה MVC אני לא מצליח להבין את ההגיון ודרכי העבודה איתו מה שא"כ דונט נט יותר קל לי להבין.
בחינת ספרים אין לי בעיה לקנות את 2 סוגי הספרים של הוצאת "הוד עמי" שהם ספרים מצויינים ללמוד.
דבר המומחים מוזמנים ליעץ לי מה לעשות
-
ההמלצה שלי היא ASP.NET MVC. לא בגלל הרעיון עצמו, אלא
א. פשוט כל ההיבטים המודרניים של תעשיית התוכנה הוטמעו שם די טוב.
ב. הASP.NET הרגיל עובד עם WebForms ובן לוייתו ViewState שלדעתי זה טכנולוגיה נוראה. עדיף PHP או כל דבר אחר מזה.נ.ב. הייתי ממליץ על ASP.NET MVC CORE, שזה גלגול מודרני יותר (בהרבה דברים), וכבונוס הוא חוצה פלטפורמות ורץ על כל מערכת.
שאלת מה ההבדלים. אז WebForms זה פשוט זבל. אין טען להתייחס לעבודה הכבירה שנעשתה שם שפשוט לא לקחה בחשבון את אופי הארכיטקטורה והתכנות בווב.
לעומת זאת, איך עובד MVC בASP.NET:
קודם כל MVC זה תבנית עיצוב של תוכנה שנמצאת במגוון שפות וטכנולוגיות. הרעיון שלה הוא שהמשתמש עובד מול תצוגה (V), התצוגה נוצרת ע"י הבקר (C), ואותו הבקר הוא גם זה שמגיב על אירועי/בקשות המשתמש דרך התצוגה (ביישום אינטרנט המונח הנכון זה בקשות). הבקר עצמו ממונה רק על התקשורת, כשהמידע הגולמי מועבר/מתקבל על ידו מ/אל המודל (M).
זה יפה לתיאוריה, למעשה יש חופש בתוך הכללים האלה.
בASP.NET הMVC נבנה עם הרבה השראה מRuby on Rails, שכוללת עקרונות שונים כמו CoC - Convention Over Configuration, שזה אומר בעברית "מוסכמות על פני הגדרות" - ההשלכה המעשית: כל פרט שניתן להניח מה תהיה ההגדרה שלו, זו התנהגותו ללא כתיבת הגדרה זו בפירוש. הכלל הזה ממש מכסה את כל מערכת הMVC בASP.NET.
עקרונות הליבה של יישום ASP.NET MVC:- ניתוב - Routing.
ביישום אינטרנט מסורתי שורש הURL בעצם מפנה לשורש תייקת האתר, והנתיב מכאן ואילך הוא ביחס לשמה תיקיה בתוך תקיה וכו' עד לקובץ המתאים, למשל: http://example.com/directory-a/directory-b/file.php
ביישום MVC הניתוב הוא מופשט ובלי קשר למבנה תיקיית האתר. בעצם ישנו "מטפל" אחד בכל הנתיבים, שלפי הנתיב מנתב למתודה של קונטרולר. בברירת מחדל (מוסכמה) האיבר הראשון אחרי שורש האתר מצביע על שם הקונטרולר, והשני על מתודה שבו, אלא שאחריהם יכולים להיות מנותבים לפרמטרים למתודה. - בקרים - Controllers
יכול להיות כמה בקרים שרוצים, ברך כלל הם תחת תיקיה בשם Controllers. בכל Controller יש כמה מתודות, כל אחת בדרך כלל אחראית לייצר תצוגה.
(יש גמישות מלאה איזה מתודות לשים באיזה בקר, בעצם זה נטו עניין של טעם אישי וסדר כמו תיקות וקבצים). - תצוגות - Views
הרעיון של תצוגה בMVC זה פיסת פרוצדורה שלא עושה שום דבר שלא נוגע לתצוגה, והיא מתקשרת אך ורק עם הController.
בASP.NET נעשה שימוש במנוע תצוגה נח וקל מאוד בשם RAZOR הוא הטוב ביותר שקיים לדעתי.
התצוגות בדרך כלל מקובצות בתיקיות כשכל קבוצת תצוגות ששייכת לבקר מסויים נמצאות תחת תיקיה כשם הבקר, שהיא תחת תיקיה ראשית בשם Views. - מודלים
זה "סתם קוד", שעל פי הכללים עדיך לעשות בו את הלוגיקה והעבודה עם המסד נתונים וכו' מאשר בבקר. כמובן שאין על זה קנסות מהמשטרה ואפשר להתגמש אבל זה הדרך לפי הספר.
בקשר לשפה, יש לך את VB בשניהם, כלומר VB.NET, יש חלקים מתקדמים בשפה כמו Attribute שהופכים בMVC להיות בשימוש תכוף מאשר בטכנולוגיות אחרות, אבל אלו לא דברים שמחייבים הבנה מעמיקה.
הספרים יש רק אחד, השני, והוא תרגום חלש אבל רע במיעוטו.
אני מעודד לקפוץ למים גם תוכל לקבל פה עזרה ובפרט בפורום האקסקלוסיבי.
- ניתוב - Routing.
-
@dovid
א. תודה רבה על תשובתך המפורטת.
ב. מרבית הדברים שכתבת אני יודע (מודל/בקר/תצוגה).הבעיה שלי כמה שאני מנסה להבין את הטכנולוגיה והקישור בן שלושת המרכיבים אני עדיין לא מצליח להבין.
ניסיתי המון דוגמאות של פרוייקט MVC ועדיין אני לא הצלחתי להבין את הקשרים ואיך לחבר בניהם כגון: כיצד הקוד מקושר לבקר והתצוגה לבקר מה שאין כן ב-WebForm ששם זה יותר פשוט
(יש טופס ואובייקטים ואחורי כל אובייקט יש קוד ע"פ הצורך)
ברור לי שאני מפספס משהו שקשור למרכיבים.
יותר נכון להגדיר את הבעיה:"איזה קוד מחבר מה למה"אני מאמין ברגע שיפול לי האסימון בהבנה של הטכנולוגיה יהיה לי יותר קל להתקדם.
@dovid אמר בASP.NET vs ASP.NET MVC:
בקשר לשפה, יש לך את VB בשניהם
לפי מה שידוע לי ש MVC עובדת רק מול C#
-
@zvinissim אמר בASP.NET vs ASP.NET MVC:
לפי מה שידוע לי ש MVC עובדת רק מול C#
קיים גם עם VB
רק שמנסיון הרבה יותר קל, במיוחד ברזור, עם C#.
בעיקר בשלבים של הקוד שמסתובב בגוגל ובסטאק.
אין ממירים נורמלים לרזור מC# לVB
אני אישית עברתי מVB לC# מלא, ההגירה לא הייתה קשה כ"כ, אבל עדיין אני מתגעגע הרבה פעמים לקריאות ולפשטות של VB.
( @dovid הבטיח לי שהגעגוע הזה חולף עם הזמן אבל אני עדיין לא הגעתי לזה ) -
@clickone אמר בASP.NET vs ASP.NET MVC:
קיים גם עם VB
@clickone אתה תמיד אמרת לי שאפשר רק עם C#
@clickone אמר בASP.NET vs ASP.NET MVC:
אני אישית עברתי מVB לC# מלא, ההגירה לא הייתה קשה כ"כ,
עכשיו יש לך מטלה לעזור לי
-
@zvinissim אמר בASP.NET vs ASP.NET MVC:
הבעיה שלי כמה שאני מנסה להבין את הטכנולוגיה והקישור בן שלושת המרכיבים
תתחיל לשאול.
-
כשאתה פותח פרוייקט חדש, יש בו קובץ startup בו מוגדרים רבים מההגדרות, ביניהם הגדרות ניתוב.
-
כשאתה "מריץ" את הפרוייקט הדפדפן נפתח עם כתובת האתר.
-
בניתוב הברירת מחדל יש התייחסות למקרה שלא צויין בקר ומתודה, והם מקבלים את הערך Home לבקר, וIndex למתודה, כאילו נכתב localhost:xx/Home/Index.
-
נוצר מופע מהמחלקה HomeController שהיא הבקר, ומתבצעת קריאה למתודה Index שבה. היא מחזירה View(), זו פונקציה שמקבל כפרמטר שם תצוגה (קובץ cshtml/vbhtml - שזה פורמט Razor שיושב תחת התיקיה Views) אבל בברירת מחדל (מוסכמה על פני הגדרה) - אם לא העבירו לה שם, היא מחפשת תצוגה בעלת שם זהה למתודה בה היא רצה, שבתוך תיקיה בעלת שם זהה לבקר בה שוכנת המתודה.
-
ממילא, התצוגה הנוצרת היא מהRazor ששמו Index.cshtml/index.vbhtml ששוכן בתיקיה Views/Home.
-
התצוגה יכולה ואמורה לקבל מידע מהבקר לפי הספר. ישנם שתי דרכים: א. מודל, שזה אובייקט יחיד שמועבר כארגומנט בפונקציה View ההיא, ומתקבל בתצוגה אחרי הכרזת הסוג למעלה ככה:
@model MyClassData
ואז בכל התצוגה המידע זמין תחת המאפיין Model.
דרך נוספת להעברת מידע זה הViewBag או ViewData שזה האובייקטים היחידים שמשותפים גם לבקר וגם לView, כלומר בבקר אפשר לכתובViewBag["some key"] = 123;
וזה יהיה נגיש באותה דרך גם בתצוגה.
-
תקשורת הפוכה, כלומר מהתצוגה לבקר, מתבצעת אך ורק ע"י בקשות אינטרנט. למשל הבקשה \Home\Index שמניבה את התצוגה היא בעצם בקשה שמתקבלת ע"י הבקר. אם למשל נוסיף בתצוגה כפתור נוכל לגרום לו ע"י טופס HTML (או ע"י קצת JS) להפוך לבקשת GET או POST שיתקבלו אצל הבקר עם/בלי מידע נוסף, ויניב תשובת HTML או למשל JSON.
תנסה למקד אותי כי התפזרתי...
-
-
@dovid תודה רבה על תגובתך המלאה.
אתמול פתחתי שוב פרוייקט חדש כפי שיעצת לעשות והתחלתי לעבור על הקוד שנמצא בבקר ובמקביל בקוד שנמצא בתצוגה ובמקביל פתחתי את דף Layouts בכדי לנסות ולהבין איך החיבור נוצר בן 2 המרכיבים האלו.
בכוונה לא המשכתי לכיון המודל - זה עדין מספיק לי להבין את המערכת).לקחתי דף שנוצר לדוגמא ושכפלתי אותו וניסיתי לתת לו קישור ב Layouts ולהבין איך אני מקשר בן התצוגה לבקר ולהפתעתי הצלחתי עם ניסוי וטעיה קטנים.
י
הבעיה שלי העיקרית שאני לא מצליח להבין עדיין איך אני כותב קוד C# ומה התחביר שמתחבר לכיון התצוגה (מקווה שהסברתי נכון).את שמות התקיות ומרכיבהם התחלתי כבר להכיר.
כנראה שלא תהיה לי בררה להתחיל לפתוח פרוייקט "חי ואמתי" ולתנסות ולא בסתם פרוייקט דמו.
בגלל שאני צריך גם UserName +Password אני אפתח פרוייקט אמיתי שאני רוצה לבנות עם הרשמה ואתחיל לבנות משהו רציני עם שאלות.
@dovid האם הספר הזה: מדריך ASP.NET MVC 4 מתאים לי להתחלה?
מדריך ASP.NET MVC 4
מחבר Jon Galloway, Phil Haack Brad Wilson, K.Scott Allen יועץ מקצועי מאיר קרודו דאנאקוד 259-10459 מק"ט 978-965-361-395-9 הוצאה לאור Wrox תאריך הוצאה לאור 7/2013 כריכה רכה מספר עמודים 514 תוכן עניינים ועמודים לדוגמה [...]
-
@zvinissim אמר בASP.NET vs ASP.NET MVC:
@dovid האם הספר הזה: מדריך ASP.NET MVC 4 מתאים לי להתחלה?
מדריך ASP.NET MVC 4
מחבר Jon Galloway, Phil Haack Brad Wilson, K.Scott Allen יועץ מקצועי מאיר קרודו דאנאקוד 259-10459 מק"ט 978-965-361-395-9 הוצאה לאור Wrox תאריך הוצאה לאור 7/2013 כריכה רכה מספר עמודים 514 תוכן עניינים ועמודים לדוגמה [...]אישית יש לי אותו ואני מרוצה.
-
Layout בקצרה:
בתיקיית Views אם יש קובץ בשם _ViewStart, אז הוא נקרא תמיד לפני כל תצוגה.
בקובץ הזה יש קוד, שככה הוא נראה בדרך כלל:@{ Layout = "~/Views/Shared/_Layout.cshtml"; }
כיון ששורת קוד מבוצעת עבור כל התצוגות, הרי זה כאילו כתוב את זה בכל תצוגה. זה בעצם מגדיר את נתיב הקובץ _Layout.cshtml למאפיין Layout שההשלכה שלו היא שהדף מבוסס על התבנית של הדף שצויין.
תצוגה שיש לה Layout לא מרונדרת באופן ישיר: קודם מרונדר קובץ האב, ורק אם-איפה שיש @RenderBody() מוזרק הרינדור של התצוגה עצמה.
(בתצוגות שנרצה לדרוס התנהגות זו מוסיפים בהתחלה Layout = null וזה מאפס את ההגדרה).הבעיה שלי העיקרית שאני לא מצליח להבין עדיין איך אני כותב קוד C# ומה התחביר שמתחבר לכיון התצוגה (מקווה שהסברתי נכון).
תתחיל ממשהו קטן, נניח תכתוב במתודה אינדקס כזה קוד:
public ActionResult Index() { ViewData["result"] = 1 + 1; return View(); }
ובRazor תכתוב איפשהוא
<strong>result is</strong> @ViewData["result"]
ותראה את התוצאה.
להבנת העברת המידע לבקר תכתוב משהו גדול יותר, למשל:public ActionResult Calc(int oneNumber, int anotherNumber) { ViewData["result"] = oneNumber * anotherNumber; return View("Index"); }
בשביל לצפות בתוצאה כתוב בשורת הכתבות נתיב כזה:
http://localhost:xx/Home/Calc?oneNumber=52&anotherNumber=33
שים לב שהעברתי למתודה View פרמטר טקסט Index כי רציתי להשתמש בתצוגה של מתודה עם שם שונה, אז לא יכלתי לסמוך על הCoc - מוסכמות.
הפרמטרים oneNumber anotherNumber של המתודה אינדקס מסופקים אוטומטית ע"י המנוע של MVC, כשהוא מאתר אותם בפרמטרי הכתובת - QueryString. למנגנון התאמת פרמטרי המתודה לערכים המסופקים ע"י הבקשה קוראים Model Binder והוא רחב אפשרויות, הוא קורא ערכים הן מהכתובת הן מפרמטרי הכתובת, והן מגוף הבקשה (body).יש לי אותו ונהנתי ממנו בבחינת "המקסימום שהיה בעברית".
-