MVVM לעומת Code Behind

zahalul

New member
MVVM לעומת Code Behind

שלום,

אני מפתח פרוייקטים ב- WPF שכל אחד מהם תפור (מבחינה חזותית) לחומרה אחרת.
רק ה- Styles וה- Controls עוברים בין הפרויקטים.
האם במקרה זה שווה להשקיע ב- MVVM ?
האם מבחינת ביצועי run time יש יתרון ב- MVVM ?

תודה,
צהלול.
 

ziv1f

New member
יש דברים שפשוט לא יעבדו לך עם CodeBehind

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

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

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

אם יש עוד שאלות אתה מוזמן לשאול פה.

בברכה,
זיו
 

zahalul

New member
האם תוכל לשלוח לינקים ?

המון תודה על תגובתך המפורטת.
&nbsp
צהלול
 

ziv1f

New member
בוודאי

וגם כמה דברים קודם:
- MVVM זה לא הדבר היחיד שיש ב-WPF, כי אפשר לממש אותו בכמה צורות, מיקרוסופט מימשו אותו בעזרת XAML ו-Binding
- חשוב מאד לפני שמתחילים לבנות UI ב-WPF ללמוד עם על שיטת ה-Layout בסביבה זו, ומגוון הפאנלים (המועט מאד אבל רב אפשרויות) שקיימים בדיפולט (אפשר גם לייצר בעצמך פאנלים, אבל זה למתקדמים)
- הרעיון המרכזי הוא שאתה בונה את ה-UI, ומייצר במקביל סט של אובייקטים שמייצגים את המצב של ה-UIת והבינדינג הוא בעצם הדבק שמחבר ביניהם
- ישנן מספר שיטות לעשות בינדינג, וגם מספר עזרים כמו למשל Converters, חשוב מאד ללמוד גם אותם, זה קצר ופשוט (קונברטר זה מימוש של אינטרפייס עם 2 מתודות) וחיוני מאד.
- לעיצוב UI מדוייק ולמימוש עיצובים צריך גם לדעת סטיילינג בזאמל, זה תחום שלם ואם אתה בונה אפליקציה פנים ארגונית אז תשאיר את זה לסוף
- WPF מבוסס בהמון מקומות על טמפלייטים, אל תיבהל זה (גם כן) פשוט מאד, צריך רק להכיר פעם אחת וזה טס
- הבדל העיקרי בין Model ו-ViewModel הוא שה-Model מתאר את מבנה הנתונים כפי שהוא מאוחסן (למשל ב-DB), ואילו ה-ViewModel מתאר את מבנה המסך, שהנתונים הם חלק ממנו, אבל גם איזה אובייקט נבחר ע"י המשתמש זה חלק ממנו שאינו חלק מהמודל, או האם expander מסויים סגור או פתוח וכן הלאה, ולכן אפשר את המודל לשים בתור פרופרטי ב-ViewModel ובמקרה שאתה משתמש ב-EF אז הוא תומך ב-INotifyPropertyChanged ולכן אפשר בקלות להשתמש בו כחלק מה-ViewModel
- אחרי שתבין את INotifyPropertyChanged (אינטרפייס שכל מה שיש בו זה איבנט אחד) אתה תראה שצריך ב-WPF פריימוורק ל-MVVM שממלא כמה פינות שמיקרוסופט שכחו (כמו למשל מימוש פשוט וסביר ל-ICommand) אז תתקין MVVMLight דרך NUGET. יש עוד כמה פריימוורקים כמו PRISM (שאני מתעב אותו) או Caliburn.Micro (שאני עובד איתו), אבל MVVMLight הוא הכי פשוט להתחיל איתו
- Xamarin תומך גם בזאמל, עוד לא בדקתי אבל ממליץ לבדוק, במיוחד למי שרוצה לכתוב למובייל בהמשך

עכשיו לכמה וידיאוס, בגדול תחפש ביוטיוב WPF MVVM tutorial ותראה כמה מאלה שיוצאים בתוצאות, הרעיון הוא אותו הרעיון, וגם (לפחות לטעמי) אין פה שום דבר שצריך להצמד אליו באדיקות, רק להבין את הרעיון

טיובים:
https://www.youtube.com/watch?v=7LKiYpmHxhc
https://www.youtube.com/watch?v=R_NQlB5eHKE
https://www.youtube.com/watch?v=-4fOPIz2s_U

אתרים טובים וחשובים:
http://drwpf.com/blog
https://wpf.2000things.com

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

עכשיו צא לדרך, ותחזור עם שאלות


בברכה,
זיו
 
בדרך כלל, MVVM

המטרה העיקרית של MVVM היא תמיכה בבדיקות יחידה.

במקרה שלך, לכאורה יש עוד סיבה טובה מכיוון שאתה כותב כמה פרוייקטים שעשויים לשתף ביניהם קוד. אמנם כתבת שרק הפקדים והStyles משותפים, אבל אני מניח שיהיו גם סרוויסים משותפים ועוד דברים. Mvvm נותן לך הפרדה טובה מאד בין הקוד לבין הUI ולכן תוכל לשתף בקלות חלקים מהקוד.
 
למעלה