Model View Controller

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

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


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

לדוגמא:

יש לי מסד נתונים, ובו רשימה של אנשים. המחלקה/אובייקט שלי בעצם ייצגו רשומה עם כל הפרטים על אותו משתמש. כלומר, שם פרטי, שם משפחה, כינוי, דוא"ל, אתר בית וכו'…
עכשיו בשביל להציג רשימה עם הפרטים הללו, אני בסה"כ צריך לקרוא רשימה של המחלקות/אובייקטים שמכילים את המידע, ולייצג אותם בצורה כלשהי, לדוגמא, רשימה של שם פרטי + שם משפחה ובסוגריים את הכינוי, ברשימה של תיבה מקושרת, או טבלה או כל דבר אחר.

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

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

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

וכמובן אפשר להמשיך, אבל אני חושב שאתם רואים את התמונה הכוללת.

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

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

סתם עוד חומר למחשבה בנושא טכנולוגי.

2 מחשבות על “Model View Controller

  1. mksoft

    להרחיב עוד מעט את הנושא:

    1. כדאי לציין גם שהמודל לא חייב להיות בסיס הנתונים הקלאסי (יכול להיות מידע שמגיע מקבצים שטוחים, LDAP וכד').

    2. אחד היישומים הטבעיים של ה-design pattern הזה הוא ביישומי ווב, אך אין פירוש הדבר שהוא מוגבל לשם. לדוגמא אפשר לקחת את Swing בג'אווה או kiwi עבור PyGTK.

  2. פינגבק: עוד framework לרובי « לראות שונה

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת /  לשנות )

תמונת גוגל

אתה מגיב באמצעות חשבון Google שלך. לצאת מהמערכת /  לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת /  לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת /  לשנות )

מתחבר ל-%s

This site uses Akismet to reduce spam. Learn how your comment data is processed.