הבהרות לגבי MVC

cstl

New member
הבהרות לגבי MVC

התחלתי לאחרונה לנסות ללמוד וליישם את גישת ה- Model View Controller.
לגבי ה- Model וה- View המצב יחסית ברור,
ה- Model מחזיק את כל הלוגיקה והתקשורת מול DB אם קיים כזה, ה- View מממש כל מה שקשור לממשק משתמש.
אבל אני קצת מתקשה להבין עד הסוף את תפקיד ה- Controller

על פי כל המדריכים, הוא אמור לשמש כ"מתווך" בין שני החלקים האחרים.
לא כל כך ברור לי מה זה אומר ואך זה בא לידי ביטוי.
מדוע ה- Model וה- View לא יכולים לתקשר ישירות אחד מול השני.
אשמח להבהרות, ואם אפשר גם הפניות לדוגמאות ממשיות (לצורך העניין, אני כותב בפייתון אבל גם שפות אחרות יוכלו כנראה להועיל)
אין צורך בקישורים לויקיפדיה, כבר הגעתי לשם עצמי


תודה מראש.
 
תשובה מנסיון

כי בהתחלה הכל פשוט וקל, אתה ניגש לDB מהView ועושה פעולות פשוטות ובאמת ה controller נראה מיותר,
אבל אז, לאט לאט, נוספת עוד טיפ'לה לוגיקה לview, ועוד טיפה ועוד טיפה, ובסוף הView נראה כמו קצת view והרבה מאוד לוגיקה.
ואז לא מוצאים את הידיים והרגליים.
וכשרוצים להחליף את ה View במשהו יותר יפה, שמתאים לסגנון שנות ה2020 ולא כמו למשהו מסוף שנות ה80, אז לך תמצא את הידיים והרגליים.

מקווה שעזרתי
 

cstl

New member
אין כמו ניסיון...

ברור לי שבמערכות מורכבות ההפרדה הזו היא מבורכת.
אבל אני לא מצליח לתרגם את התיאוריה למציאות.
איך משפט כמו "ה- controller הוא מתווך בין ה- view ל- model" הופך למשהו אמיתי.
הבעיה שגם לא הצלחתי עדיין למצוא דוגמאות מוחשיות טובות לתבנית הזו, רק הסברים תיאורטיים חסרי ביסוס או דוגמאות ברמה גבוהה מדי.
אין איזה תכנית Hello World שעושה שימוש ב- MVC ... ?
 

BravoMan

Active member
כי תבניות זה דבר טוב בתאוריה...

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

אבל הם לא תורה מסיני ולא תמיד צריך להיצמד לתבנית כזו או אחרת.

תוכנה בסדר של Hello World לא צריכה תבנית. היא קטנה מידי.

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

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

לא מזמן ראיתי כתבה על ספר, שזמין ברישיון חושפי ומתאר כיצד נבנו פרויקטים גדולים וידועים בקוד פתוח.
http://www.whatsup.co.il/modules.php?op=modload&name=News&file=article&sid=7047

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

cstl

New member
כמובן שצחקתי לגבי...

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

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

cstl

New member
כל הכבוד על הנחישות


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

MVC הוא design pattern שבה לפתור בעיה פרגמטית.
מסיבה זו תמצא הרבה דרכים למימושו, אם המון סטיות ושינויים וסגנונות.
כל נסיון "ללמוד" ו"ליישם" את MVC ב"תאוריה" יסתיים במפח נפש ואי הבנת העקרון הבסיסי - שה-pattern מגיע לעזור ולתמוך בך בדרך להצלחת הפרויקט והמשימה הפרקטית.
דבר נוסף, הגדולה של MVC היא בכך שאחרי שהבנת את העיקרון, תוכל לצלול לעומק במהירות עצומה לתוך frameworks ענקיים, מורכבים, וכוללניים, ולמצוא את הידיים והרגליים ואת כל הפעמונים והמשרוקיות ואת מה שאתה צריך בדיוק במקום שבו תחפש אותם, גם בלי להכיר את המערכת או אפילו את שפת התכנות!
אם אתה כותב בפייתון, בחר (או תמציא) לעצמך משימה אמיתית, ותתחיל לעבוד עם django, על פי מודל ה-MVT שהם המציאו, ובדוק אם הוא נוח לך!
(אם תתחיל לנסות לבנות לעצמך כל מיני פתרונות, תמצא את עצמך בעוד שבוע באותו מקום, עם יותר שאלות!)
אל תתבייש לשאול אותי כל שאלה על פייתון או django כאן או בפרטי,
בהצלחה!
אודי
 
למעלה