מסכים עם דבריך באופן חלקי
וכמובן שדבריך אינם מדוייקים בעליל, במיוחד לגבי הדברים שבהם אתה מתיימר להבין את דעותיי וגישתי לדברים
MVVM הוא תבנית עיצוב, ולכן אינו כולל בתוכו את השימוש ב-IOC או DI שהן תבניות עיצוב נוספות, ובלתי קשורות לחלוטין. גם בנוגע לתבניות עיצוב אלה, ישנן שיטות שונות לממש אותן וגישות שונות וחלקיות או מלאות לממש אותן, וישנן הרבה דעות לגבי נחיצותן של אלה ושל אלה. אתה מביא את הדברים (לפחות להבנתי הצולעת) כאילו או שאדם משתמש ב-MVVM מתחילתו ועד סופו, או שאינו נקרא מיישם MVVM כלל, כנל לגבי השימוש ב-IOC או DI. זו גישה שלטעמי היא שגויה ומובילה בראש ובראשונה להרבה מאד עבודה ובהמשך מגלים שריבוי העבודה לא הביא תועלת מרובה כפי שניתן היה לחשוב בתחילת העבודה.
אין לי גישה של "אוהב" או "לא אוהב" יוניט-טסטים, אני עושה את זה אם צריך, והתייחסתי רבות לצורך בבדיקות-יחידה בהתאם לגודל הפרוייקט והשלב בו הוא נמצא, ומספר האנשים שמעורבים בו. כרגע למשל אני חלק מפרוייקט שבו משתמשים בהן, ולכן אני מממש בדיקות שכאלה, ולפני שבוע העברתי קומיט של קוד לאחר שהעברתי אותו דרך משהו כמו 100 בדיקות שונות, ולאחר שעבר את כולן בהצלחה, רק ששכחתי להריץ את הפרוייקט, ורגע אחרי שעשיתי PUSH גיליתי שהפרוייקט לא עולה בכלל (מסתבר שזה בגלל attribute שהיה חסר - DataContract). אני לא בא לומר שאלה או אלה לבדם הם חיוניים, אלא שיש להשתמש גם באלה וגם באלה בצורה מדודה.
אני *כן* משתמש (לפחות בפרוייקט הנוכחי) ב-IoC - וגם פה יש הרבה מאד יתרונות והרבה מאד בעיות. לדוגמה קטנה מהקטנות, אם דברים לא עובדים כמצופה, יש הרבה יותר קושי למצוא למה, מאשר בדרך שבה אני הוא היוצר את האובייקטים. עבדתי במספר פרוייקטים שבהם עשו שימוש ב-DI/IoC שבעצם לא הביא הרבה תועלת, אבל מצד שני יצר המון קשיים, ולכן הגישה שלי היא פרקטית, כלומר מה שעובר ומה שעוזר זה מה שצריך לעשות. באחד המקומות שבהם עבדתי והיה שם את השימוש המאסיבי ביותר גם בבדיקות וגם ב-DI הקצב של התקדמות הפיתוח היה איטי עד אפסי, ובדיעבד חלק גדול מזה נגרם מהשימוש (חלקו לקוי) בשיטות אלה. אלה שיטות שקל מאד לעשות להן abuse וקשה מאד להבין איך בדיוק צריך לעבוד איתן והיכן כן והיכן לא, ובמקום שבנאדם ישב וילמד אלף דברים בשביל אפליקציה של ספר טלפונים, ההמלצה שלי היא פשוט לכתוב את התוכנה כך שתציג ספר טלפונים. אם בשלב מאוחר יותר ספר-הטלפונים הופך למערכת CRM רב-שכבתית, יהיה בכל מקרה צורך לשנות את הארכיטקטורה מתחילתה ועד סופה, ובין השאר כנראה יהיה צורך להכניס IOC או DI ובדיקות-יחידה.
מעולם לא טענתי שאין צורך להפריד את שכבת ה-VIEW משכבת VM, טענתי (אם זכרונני איננו מטעני) שלגבי MODEL ו-VM, לרוב המימוש של שכבת המודל הוא בעזרת ORM כלשהו, וזה ממומש ע"י EF ודומיו, שגם דואג לממש נוטיפיקציות על שינוי, ולכן אין באמת שכבת מודל שצריך לטרוח עליה כמו על שכבת ה-VM. בנוסף אמרתי שלפעמים הדרך הכי מוצלחת היא להשתמש ב-VIEW ובקוד שלו ע"מ לבצע משימה, אני לא חושב שזו הדרך המיטבית אבל כמו תמיד אם בהמשך מתגלה בעיה, עושים refactoring ומשנים את מבנה הקוד.
הטענה העיקרית שלי היא שצריך להיות כל הזמן הם העיניים על המטרה, ולא עם העיניים תקועות בספר של איך נכון לעבוד, כי יש המון שיטות נכונות לעבוד, ולא תמיד כולן מסייעות למוצר או למתכנת או ללקוח, אלא בעיקר למי שכתב את הספר. מה שעובד, ברוך הבא, מה שלא עובד, הראו לו את הדלת.
הדעה שלי לגבי פריזם לא נסמכת אך ורק על ניסיוני עם סביבה זו, אלא בעיקר על פרויקטים שראיתי שמומשו בפרוייקטים שהגעתי אליהם לאחר שכבר היו בנויים זמן רב, ובעיקר משיחות שהיו לי עם אנשים נוספים שאני מעריך את דעתם בנוגע לסביבה הזו, וגם דעתם לא הייתה נוחה מהשימוש המורכב מאד באופן יחסי בסביבה זו.
בברכה,
זיו