Model View Controller

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

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

MVC, בדומה לתבניות עיצוב רבות אחרות, תוארה לראשונה בשפת התכנות Smalltalk. התבנית תוארה לראשונה בשנת 1979 על ידי טרִיגְב רִינְסקַאוּג, אז עובד במעבדות המחקר של חברת Xerox. היישום המקורי מתואר בהרחבה במאמר המשפיע שכתב סטיב ברובק[1].

תיאור התבנית[עריכת קוד מקור | עריכה]

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

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

אופן הפעולה[עריכת קוד מקור | עריכה]

ניתן ליישם את תבנית העיצוב MVC בדרכים רבות, אך לרוב היא מיושמת כך:

  • הבקר נרשם כ-Event Handler או Callback בתצוגה, בדרך כלל סמוך ליצירת הבקר. כלומר, יישום של שיטת היפוך הפיקוח (IoC). משמע, הבקר יקבל פיקוח כאשר יתרחש אירוע קלט בממשק המשתמש.
  • המשתמש מבצע פעולת גומלין כלשהי עם הממשק. לדוגמה, מקליק על כפתור 'הוסף מוצר לעגלה'.
  • הבקר שנרשם על התצוגה מקבל פיקוח ומשפעל שירותים המוגדרים במודל, כדי לשקף את הפעולה שביצע המשתמש. לדוגמה, עדכון 'עגלת הקניות' של המשתמש בפריט נוסף.
  • התצוגה מקבלת בצורה עקיפה את חוכמת התצוגה שלה מהבקר, בדרך כלל באמצעות יישום של תבנית Strategy.
  • התצוגה משתמשת במודל כדי ליצור את ממשק המשתמש. לדוגמה, התצוגה מפיקה רשימה של הפריטים בעגלה, כפי שאלה מיוצגים כרגע במודל. בין השניים אין קשר הדוק, והמודל אינו מודע לכך שהתצוגה ניגשת למידע המאוחסן בו.
  • לעיתים, המודל עשוי להודיע על שינויים המתחוללים בו לצדדים שלישיים נוספים, בדרך כלל באמצעות יישום של תבנית Observer.
  • ממשק המשתמש ממתין לפעולות נוספות של המשתמש, וכשאלה מתרחשות, התהליך חוזר על עצמו.

מימושים[עריכת קוד מקור | עריכה]

תבנית MVC השפיעה רבות על התכנון של ממשקי משתמש חלונאים רבים, החל מימי Smalltalk ועד ליישומי Web. נכון לתחילת המאה העשרים ואחת, עשרות מימושים של MVC זמינים לרוב פלטפורמות המחשוב וממשקי המשתמש העיקריים.

סביבות חלונאיות[עריכת קוד מקור | עריכה]

סביבות Web[עריכת קוד מקור | עריכה]

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]

ויקישיתוף מדיה וקבצים בנושא Model View Controller בוויקישיתוף

הערות שוליים[עריכת קוד מקור | עריכה]