Thursday, January 20, 2011

מה הפואנטה של MVVM ?

למה אני צריך את זה בכלל?!
השאלה איך לממש MVVM זו בפירוש לא השאלה הראשונה שאנו צריכים לשאול את עצמינו לפני שאנו נגשים למימוש של ארכיטקטורה או Design Pattern חדש. השאלה היא למה.
התיעוד של פריזם מספקת דוגמא מאוד טובה לבעייתיות שאליה אני מתכוון... - רוב רובו של התיעוד בנוי כך - בשביל לממש A יש לבצע B, בשביל לממש C יש לבצע D.. בהרבה מאוד מקומות שמתמשים בפריזם נופלים ללא מעט טעויות בגלל שאת השאלה הבסיסית, למה, שוכחים טיפה לשאול. (וזה חבל היות וסה"כ פריזם היא לא פריימוורק רע.. פשוט משתמשים בו מאוד רע ברוב המקרים)
הרעיון שלי בסדרת הפוסטים הבאים זה לא לתת עוד הסבר של איך לממש MVVM בדוגמא טריוויאלית, אלא לנסות באמת לתת את הדגשים של "העולם האמיתי", וזו תהייה האוריינטציה של רוב הפוסטים. יחד עם זאת, אי אפשר להקיף כל סיטואציה אפשרית, ולכן חייבים לפני כל דבר אחר להבין מה ה"שוס" של MVVM, ובמילים אחרות - למה אני צריך את זה בכלל?!
מה MVVM נותן לי?
MVVM דומה מאוד לMVC, רק שהוא טוב ממנו בכל פרמטר (MVVM זה לא רק MVC לWPF, זה שדרוג מאוד משמעותי של MVC). MVVM נותן לי כל מה שMVC נותן לי, רק יותר טוב.
טוב, אז מה MVC נותן לי? (או: תשמעו שאלה מטופשת)
אז מה באמת MVC נותן לי? אם התשובה שנתת לעצמך בראש היא "הפרדה של שכבות" או משהו דומה, אני רוצה להציע את השאלה המעניית הבאה:
עקרונית, בMVC אנו נפריד את הקוד שלי לשלוש שכבות נפרדות - Model, View, Controller.
המודל זה המידע והשירותים השונים באפליקציה (כדוגמא, DAL מעל מסד נתונים, והאובייקטים שהDAL מחזיר לנו)
הView, זה החלק שמכיל את כל הגדרות הUI באפליקציה, והקונטרולר זה ה"מוח" של האפליקציה, מה שמחבר את כל הרכיבים ביחד. כדוגמא, לחיצה על כפתור בView, נתפסת ע"י הקונטרולר, שמבקש מהDAL רשימת מוצרים ולאחר מכן שם אותם בתוך הView. גם הView וגם המודל פאסיביים למדי, והקונטרולר הוא זה שעושה את העבודה הקשה (זה תיאור מפושט משהו, אבל הוא מספיק לנו כרגע).
אז... לכאורה לממש MVC זה כבר בילט אין בWPF!
הXAML זה הView.
הCodeBehind זה הקונטרולר,
והDAL יהיה המודל!
השאלה לא כל כך טריוויאלית כמו שהיא נראית, למרות שהיא בפירוש שגויה.
אז כמובן שזו טעות. זה בפירוש לא MVC. אבל.. למה?
זו שאלה שמפתיעה לפעמים.. ובשביל לענות עליה צריכים להבין מה MVC מלכתחילה נותן לי. והפרדה של שכבת הUI משכבת הלוגיקה זו לא תשובה מספיק טובה.
Read more: LEGO FOR GROWNUPS